Как обновить bokeh.plotting.figure.y_axis с помощью сервера bokeh - PullRequest
0 голосов
/ 12 февраля 2019

- обновляется после того, как я смог повторить проблему и понять ее немного больше.

Когда я настраиваю свою фигуру для сервера Bokeh, я добавляю 25 к y_range, так что у меня есть некоторые отступы сверхудля этикеток.

plot = figure(x_range=chart_data_source.data['we'],
    plot_height=250,
plot.y_range.end = max(chart_data_source.data['total']+25)

Позже, после обновления источника данных с помощью обратного вызова, я хочу переустановить y_range.Следующая строка находится в моей функции обновления, вызванной изменением любого из виджетов с множественным выбором.Все остальное в моей фигуре меняется просто отлично, но y_range нет.Моя попытка обновить y_range:

plot.y_range.end = max(chart_data_source.data['total'] + 25)

, которая не обновляет y_range.Любая идея, как я могу обновить свой y_range на сервере Bokeh?
Версия сервера Bokeh 1.0.4

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Я понял, почему мой y_range не обновлялся.Если я установлю y_range.max независимо, тогда я не смогу «переустановить» его позже в функции update ().Но если я установлю при объявлении фигуры, я смогу обновить значение в своей функции update ().Это ожидаемое поведение Боке?

import pandas as pd
import numpy as np
from bokeh.io import curdoc
from bokeh.layouts import layout
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Button


def populate_table_source(df):
    ds = {}
    for col in list(df):
        ds[col] = df[col]
    return ds


colors = ["#c9d9d3", "#718dbf", "#e84d60"]
years = ['2015', '2016', '2017']
data = {'fruits': ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'],
        '2015': [2, 1, 4, 3, 2, 4],
        '2016': [5, 3, 4, 2, 4, 6],
        '2017': [3, 2, 4, 4, 5, 3]}
df_chart = pd.DataFrame(data)
df_chart['total'] = df_chart[years].sum(axis=1)

print(df_chart)
chart_data_source = ColumnDataSource(data={})
chart_data_source.data = populate_table_source(df_chart)

years = ['2015', '2016', '2017']
# set up widgets
button = Button(label="Update", button_type="success")


p = figure(x_range=chart_data_source.data['fruits'],
           plot_height=250,
           plot_width=1000,
           title="Fruit Counts by Year",
           tools="hover,save",
           tooltips="$name: @$name",
           y_range=(0, 10) # can be updated if you assign it here
           )
p.vbar_stack(years,
             x='fruits',
             width=0.9,
             color=colors,
             source=chart_data_source,
             )

# p.y_range.start = 0
# p.y_range.end = 10 # can't be udpated if you assign it here

def update_data():
    data = {'fruits': ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'],
            '2015': [np.random.randint(5), np.random.randint(5), np.random.randint(5), np.random.randint(5),
                     np.random.randint(5), np.random.randint(5)],
            '2016': [np.random.randint(5), np.random.randint(5), np.random.randint(5), np.random.randint(5),
                     np.random.randint(5), np.random.randint(5)],
            '2017': [np.random.randint(5), np.random.randint(5), np.random.randint(5), np.random.randint(5),
                     np.random.randint(5), np.random.randint(5)],
            }
    df_chart = pd.DataFrame(data)
    df_chart['total'] = df_chart[years].sum(axis=1)
    chart_data_source.data = populate_table_source(df_chart)
    old_y_range = p.y_range.end
    p.y_range.end = old_y_range + 2


# Set up layout
button.on_click(update_data)
lo = layout(button, p)

curdoc().add_root(lo)
curdoc().title = "MVE"
0 голосов
/ 12 февраля 2019

Range1d - это объект, который имеет свойства start и end, это то, что вы можете обновить.Присвоение одного числа всему диапазону не имеет смысла.

plot.y_range.end = max(chart_data_source.data['total'] + 25)

Сообщение об ошибке, которое вы видите, связано с чем-то другим, но без большего количества кода это невозможно спекулировать.

...