自适应 - 通过 select 小部件更新散景中的条形图时自动缩放 Y 范围
Adaptive - Autoscaling Y Range when updating a bar plot in bokeh through select widget
我不确定我的问题是否与 this question 重复,但它们不可重现且令人困惑。
在 Bokeh 中,当我使用 select widget 并更新绘图时,可以更新 x-y 范围吗?
这在处理量级不同的数据时特别有用。
dictonary={'Station':['a','a','a','a','b','b','b','b','b'],'Passengers':[20,30,40,20,10000,15000,20000,8000,16000],'Date':[1,2,3,4,1,2,3,4,5]}
df=pd.DataFrame(dictonary)
source = ColumnDataSource(data=df)
def modify_doc(doc):
station_list=['a','b']
station_selected='a'
df_r=df.copy()
x_name='Date'
y_name='Passengers'
xrange=[0,df_r.Date.iloc[-1]]
yrange=[0,df_r[y_name].max()]
source = ColumnDataSource(data=df_r)
hover=HoverTool(tooltips=[('Passengers','@Passengers'),('Station','@Station'),('Date','@Date')])
plot=figure(title='Passengers for station',tools=[hover,'pan','wheel_zoom'], plot_width=400, plot_height=400,x_range=(xrange), y_range=(yrange))
plot.vbar(x="Date", top="Passengers",source=source, width=1.5)
def update_plot(attr, old, new):
activity = select.value
data = df_r[df_r['Station'] == activity]
source.data = ColumnDataSource(data=data).data
select = Select(title='Select Station', value=station_selected, options=station_list)
select.on_change('value', update_plot)
layout=column(select, plot)
doc.add_root(layout)
show(modify_doc)
这里是输出的屏幕截图:
当你这样做时:
yrange=[0, df_r[y_name].max()]
您正在关闭 自动数据范围并自行承担更新范围的所有责任。如果你想要自动数据范围,根本不要在对 figure
的调用中设置 y_range
。如果你想固定范围的一半(例如为零),你可以这样做:
plot.y_range.start = 0
我不确定我的问题是否与 this question
在 Bokeh 中,当我使用 select widget 并更新绘图时,可以更新 x-y 范围吗?
这在处理量级不同的数据时特别有用。
dictonary={'Station':['a','a','a','a','b','b','b','b','b'],'Passengers':[20,30,40,20,10000,15000,20000,8000,16000],'Date':[1,2,3,4,1,2,3,4,5]}
df=pd.DataFrame(dictonary)
source = ColumnDataSource(data=df)
def modify_doc(doc):
station_list=['a','b']
station_selected='a'
df_r=df.copy()
x_name='Date'
y_name='Passengers'
xrange=[0,df_r.Date.iloc[-1]]
yrange=[0,df_r[y_name].max()]
source = ColumnDataSource(data=df_r)
hover=HoverTool(tooltips=[('Passengers','@Passengers'),('Station','@Station'),('Date','@Date')])
plot=figure(title='Passengers for station',tools=[hover,'pan','wheel_zoom'], plot_width=400, plot_height=400,x_range=(xrange), y_range=(yrange))
plot.vbar(x="Date", top="Passengers",source=source, width=1.5)
def update_plot(attr, old, new):
activity = select.value
data = df_r[df_r['Station'] == activity]
source.data = ColumnDataSource(data=data).data
select = Select(title='Select Station', value=station_selected, options=station_list)
select.on_change('value', update_plot)
layout=column(select, plot)
doc.add_root(layout)
show(modify_doc)
这里是输出的屏幕截图:
当你这样做时:
yrange=[0, df_r[y_name].max()]
您正在关闭 自动数据范围并自行承担更新范围的所有责任。如果你想要自动数据范围,根本不要在对 figure
的调用中设置 y_range
。如果你想固定范围的一半(例如为零),你可以这样做:
plot.y_range.start = 0