散景:一行中两个图的网格对齐

bokeh: grid alignment for two plots in one row

我有一个散景图,其中有两个连续的子图代表不同类型的数据视图(线和 hbar)。两个子图具有相同的 y 轴值、总高度,并且预计表示 y 刻度的网格线也将对齐在一条线上。但事实并非如此(见图片):

我怀疑有两种方法可以解决这个问题:1)找到一些可以自动对齐的选项; 2) 手动控制负责从 x-asis 到第一个 y-tick 的偏移的参数值。

但是我对散景的了解还不够,无法采用任何此类解决方案。请告知是否有一些参数可以修复它或者可能完全不同的方法。谢谢!

我认为您的 #2 解决方案可以正常工作。您可以手动将 y_range 设置为您想要的。以下是定义或未定义 y_range 的绘图中相同绘图数据的示例:

from bokeh.plotting import figure, show
from bokeh.layouts import Row, Column

x = [0,   1,  2,  3,  4,  5,  6]
y = [43, 45, 32, 50, 28, 30, 31]
z = [50, 52, 35, 28, 45, 47, 43]

p1 = figure(width=400, height=300)
p1.line(x=x, y=y, color='red')

p2 = figure(width=400, height=300)
p2.line(x=x, y=z, color='blue')

p3 = figure(width=400, height=300, y_range=(0, 60))
p3.line(x=x, y=y, color='red')

p4 = figure(width=400, height=300, y_range=(0, 60))
p4.line(x=x, y=z, color='blue')

row_1 = Row(p1, p2)
row_2 = Row(p3, p4)
col = Column(row_1, row_2)

show(col)

另一种获得类似结果但又不太具体的方法是让一个的 y_range 引用另一个。所以你可以让 p3 弄清楚它需要的范围是什么,然后将 p4 定义为:

p4 = figure(width=400, height=300, y_range=p3.y_range)

作为第三种选择,您可以在定义绘图后根据需要明确设置范围的 start/end:

p4.y_range.start = min(your_data_list)
p4.y_range.end = max(your_data_list)