- 在我能够复制问题并理解它之后更新了。
当我为Bokeh服务器设置我的图时,我在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。以下行位于我的更新函数中,由任何多选小部件中的更改调用。关于我的身材的其他一切都变得很好,但是y_range没有。我尝试更新y_range:
plot.y_range.end = max(chart_data_source.data['total'] + 25)
它不会更新y_range。知道如何更新散景服务器中的y_range吗? Bokeh服务器版本1.0.4
Range1d
是一个对象,具有start
和end
属性,这些是你可以更新的。将一个数字指定为整个范围没有意义。
plot.y_range.end = max(chart_data_source.data['total'] + 25)
您看到的错误消息是由于其他原因,但如果没有更多代码,则无法进行推测。
我弄清楚为什么我的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"