我试图在一系列2D散点图(x
vs {{1}中可视化高昏暗点集x[1]
(此处为昏暗(6 x 42))使用散景。 [edit2]请参阅scikit-opt的this好例子作为参考。当x[2]
出现在两个图中时,它应该与相同的范围相互作用,并且图应该同时重新缩放。我已经完成了这个,但我没有让它正确地扩展。这是一个最小的例子:[edit2]
x[1]
..进入ipython笔记本(> = py3.6),bokeh正确设置dim 1和2的比例。然后,它开始设置以下尺寸的比例,如在昏暗2中。请注意,我缩小了2倍10倍以达到这一点。
交互式地,我可以将绘图重新缩放回最佳设置。但是,我希望默认情况下这样做。我有哪些选项在散景内进行重新缩放?我用import bokeh
import bokeh.io
import numpy as np
import bokeh.plotting
bokeh.io.output_notebook()
# That's my fictional dataset
x = np.random.randn(6, 42)
x[2] *= 10
# Build the pairwise scatter plots
kw = dict(plot_width=165, plot_height=165)
# `ranges` stores the range in each dimension,
# used as both, x- and y-range depending on
# where the variable is.
figs, ranges = {}, {}
for r, row in enumerate(x):
for c, col in enumerate(x):
if r is not c:
fig = bokeh.plotting.figure(
x_range=ranges.get(c, None), y_range=ranges.get(r, None),
**kw)
fig.scatter(x=col, y=row)
fig.xaxis.axis_label = f'Dim {c}'
fig.yaxis.axis_label = f'Dim {r}'
if c not in ranges:
ranges[c] = fig.x_range
if r not in ranges:
ranges[r] = fig.y_range
figs[f'{r}_{c}'] = fig
else:
break
# Setup the plotting layout
plots = [[]]
for r, row in enumerate(x):
for c, col in enumerate(x):
if r is not c:
plots[-1].append(figs[f'{r}_{c}'])
else:
plots.append([])
break
staircase = bokeh.layouts.gridplot(plots, **kw)
bokeh.plotting.show(staircase)
玩了一下,但没有成功。谢谢你的帮助!
尾声: 按照@ bigreddot的回答,我添加了以下几行:
fig.xaxis.bounds
修复起始范围。我仍然认为这种行为是一个错误。
答案 0 :(得分:1)
从您的代码和描述中,我仍然无法告诉您希望完成的任务。 [1]但是,我将声明绘图的默认DataRange1d
范围会自动为所有渲染器创建空间,以及它们共享的所有绘图。从这个意义上说,我完全看到了运行代码时的期望。如果你想要不同的东西,你可以控制两件事:
DataRange1d
具有.renderers
属性。如果你只想要" auto"范围超过渲染器的子集,然后您可以将此属性显式设置为所需的列表。渲染器由字形函数返回,例如fig.scatter
不要使用" auto"范围。您也可以将x_range
和y_range
自己设置为Range1d
个对象。这些属性可以设置start
和end
属性,这些属性是范围的明确界限,例如x-range=Range1d(0, 10)
[1]范围与我认为奇怪的方式相关联,我无法判断这是否有意。但这是你的循环/ python代码而不是Bokeh的结果。