将x_range与y_range混合在多个图中时,散景轴限制失败

时间:2017-11-09 20:28:41

标签: bokeh

我试图在一系列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

修复起始范围。我仍然认为这种行为是一个错误。

1 个答案:

答案 0 :(得分:1)

从您的代码和描述中,我仍然无法告诉您希望完成的任务。 [1]但是,我将声明绘图的默认DataRange1d范围会自动为所有渲染器创建空间,以及它们共享的所有绘图。从这个意义上说,我完全看到了运行代码时的期望。如果你想要不同的东西,你可以控制两件事:

  • DataRange1d具有.renderers属性。如果你只想要" auto"范围超过渲染器的子集,然后您可以将此属性显式设置为所需的列表。渲染器由字形函数返回,例如fig.scatter

  • 不要使用" auto"范围。您也可以将x_rangey_range自己设置为Range1d个对象。这些属性可以设置startend属性,这些属性是范围的明确界限,例如x-range=Range1d(0, 10)

[1]范围与我认为奇怪的方式相关联,我无法判断这是否有意。但这是你的循环/ python代码而不是Bokeh的结果。