Python Bokeh: перезапустите ось X до 0 при увеличении - PullRequest
0 голосов
/ 27 января 2020

У меня есть код ниже, который создает простую линию xy.

Когда я увеличиваю масштаб, я хочу, чтобы тикер оси X снова начинался с 0, а не с 3,9 / независимо от того, была ли точка x масштабирования как на изображении.

Без увеличения:

enter image description here

После увеличения:

enter image description here

Как мне это сделать?

Код:

from bokeh.io import output_file, show, save
from bokeh.layouts import column
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource

data = []
x = list(range(11))
y0 = x
y1 = [10 - xx for xx in x]
y2 = [abs(xx - 5) for xx in x]
source = ColumnDataSource(data=dict(x=x, y0=y0, y1=y1, y2=y2))
for i in range(3):
    p = figure(title="Title " + str(i), plot_width=300, plot_height=300)
    if len(data):
        p.x_range = data[0].x_range
        p.y_range = data[0].y_range

    p.circle('x', 'y0', size=10, color="navy", alpha=0.5, legend_label='line1', source=source)

    p.legend.location = 'top_right'
    p.legend.click_policy = "hide"
    data.append(p)
plot_col = column(data)
# show the results
show(plot_col)

1 Ответ

1 голос
/ 27 января 2020

Это необычное требование, и ни одна из встроенных вещей не ведет себя так. Если вы увеличите интервал [4,7] , диапазон будет обновлен [4, 7] , и тогда на оси отобразятся метки для [ 4, 7] . Если будет достаточно просто отобразить разные метки тиков, даже если базовый диапазон начала / конца остаются их обычными значениями, тогда вы можете использовать пользовательское расширение для создания любых пользовательских меток, которые вы хотите. В Руководстве пользователя есть пример, который уже делает почти то, что вам нужно:

https://docs.bokeh.org/en/latest/docs/user_guide/extensions_gallery/ticking.html#userguide -extensions-examples-ticking

Вы также можете сделать что-то еще проще с FuncTickFormatter, например (не проверено)

p.xaxis.formatter = FuncTickFormatter(code="""
    return tick - ticks[0]
""")
...