График Bokeh первой оси Y теряет автомасштаб со второй осью Y - PullRequest
0 голосов
/ 03 марта 2019

Простой боке-график, первая ось 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 голосов
/ 29 марта 2019

Значение по умолчанию для 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

...