-在我能够重现该问题并对其有所了解之后进行了更新。
当我为Bokeh Server设置图形时,我在y_range上添加25,以便在顶部添加一些标签填充。
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。下面的行在我的更新函数中,由任何multiselect小部件中的更改调用。关于我的身材的所有其他一切都变化很好,但是y_range却没有。我尝试更新y_range:
plot.y_range.end = max(chart_data_source.data['total'] + 25)
这不会更新y_range。知道如何在bokeh服务器中更新y_range吗?
散景服务器版本1.0.4
答案 0 :(得分:0)
Range1d
是一个对象,具有start
和end
属性,您可以更新这些属性。将一个数字分配为整个范围没有意义。
plot.y_range.end = max(chart_data_source.data['total'] + 25)
您看到的错误消息是由于其他原因引起的,但是如果没有更多代码,则无法推测。
答案 1 :(得分:0)
我弄清楚了为什么我的y_range没有被更新。如果我独立设置y_range.max,那么以后将无法在update()函数中对其进行“重置”。但是,如果我在声明该图时进行了设置,则可以在我的update()函数中更新该值。这是Bokeh的预期行为吗?
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"