散景:情节和长宽比的网格

时间:2018-12-17 10:47:30

标签: bokeh

我试图使网格成为图像和折线图,但是第一个图像折线是水平拉伸的,这显然是因为第二行中的折线图的y轴标签占用了宽度。

有什么办法可以防止这种情况?

# create an array of RGBA data
N = 20
img = np.empty((N, N), dtype=np.uint32)
view = img.view(dtype=np.uint8).reshape((N, N, 4))
for i in range(N):
    for j in range(N):
        view[i, j, 0] = int(255 * i / N)
        view[i, j, 1] = 158
        view[i, j, 2] = int(255 * j / N)
        view[i, j, 3] = 255

#output_file("grid.html", )

p = figure(plot_width=200, plot_height=200, x_range=(0, 10), y_range=(0, 10))
p.image_rgba(image=[img], x=[0], y=[0], dw=[10], dh=[10])

p2 = figure(plot_width=200, plot_height=200, x_range=(0, 10), y_range=(0, 10))
p2.image_rgba(image=[img], x=[0], y=[0], dw=[10], dh=[10])

p3 = figure(plot_width=400, plot_height=200)
p3.line([1, 2, 3, 4, 5], np.array([6, 7, 2, 4, 5])*10000, line_width=2)
p3.xaxis.axis_label = f'Wavelength'
p3.yaxis.axis_label = f'Flux'

l = gridplot([
    [p, p2],
    [p3]
], sizing_mode='fixed')

show(l)

enter image description here

1 个答案:

答案 0 :(得分:1)

从Bokeh 1.0.2开始,没有直接的方法可以控制内部框架的尺寸。有一个ongoing WIP Pull Request用于添加此功能,而其他功能则将在1.1版本中发布。

同时,您可以:

  • 通过plot_widthplot_height控制画布的整体宽度/高度
  • 使用min_bordermin_border_left等来控制内部周围的最小填充。
  • 通过控制坐标轴的旋转,格式或位置来控制坐标轴的范围

因此,如果控制刻度(并考虑任何颜色条大小等),并设置适当的min_border值(不会超过该值),则可以有效地间接控制框架尺寸。我注意到这远非理想,并期待版图PR的到来。