散景图第一个y轴失去了第二个y-轴的自动缩放

时间:2019-03-03 05:14:01

标签: bokeh

一个简单的散景图,第一个y轴最初是自动调整范围的。添加了第二个y轴后,第一个y轴范围将受到影响。

我无法为每个y轴使用固定的y轴范围,因为提前知道这些限制。我使用AjaxDataSource将数据更新到绘图。

以下程序演示了该问题。更改y3中的值将更改第一个y轴范围。

from numpy import sin
from bokeh.plotting import output_file, figure, show
from bokeh.models import LinearAxis, Range1d, DataRange1d

x = [p/100 for p in range(0, 320)]
y = sin(x).tolist()

output_file("twin_axis.html")

p = figure()
p.line(x, y, color="red")

x1 = [0, 1.0, 2.2, 3.2]
y3 = [60, 70, 70, 70]  # Changing these values affects first y-axis scale
p.extra_y_ranges = {"Yield": Range1d(start=0, end=50)}  # tried DataRange1d(), no help
p.circle(x=x1, y=y3, color="blue", y_range_name="Yield")
p.add_layout(LinearAxis(y_range_name="Yield", axis_label="Yield(%)"), 'right')

show(p)

我正在使用bokeh v1.0.4。

1 个答案:

答案 0 :(得分:0)

y_range的默认值为"auto",因此,如果您不指定任何范围,它将随您的额外范围缩放。解决方案是为您的绘图明确指定y_range,如下所示(Bokeh v1.0.4的工作)

from numpy import sin
from bokeh.plotting import output_file, figure, show
from bokeh.models import LinearAxis, Range1d, DataRange1d

x = [p / 100 for p in range(0, 320)]
y = sin(x).tolist()

output_file("twin_axis.html")

p = figure(y_range = Range1d(start = 0, end = 1))
p.line(x, y, color = "red")

x1 = [0, 1.0, 2.2, 3.2]
y1 = [60, 70, 70, 70]  # Changing these values affects first y-axis scale
p.extra_y_ranges = {"Yield": Range1d(start = 0, end = 50)}  # tried DataRange1d(), no help
p.circle(x = x1, y = y1, color = "blue", y_range_name = "Yield")
p.add_layout(LinearAxis(y_range_name = "Yield", axis_label = "Yield(%)"), 'right')

show(p)

结果:

enter image description here