将面板的DatetimeRangePicker绑定到图表
我正在尝试修改一个已经能用的面板仪表盘,把原来的 DatetimeRangeSlider 小部件换成 DatetimeRangePicker 小部件。
我有一段很长的时间序列,但通常只想绘制最近两周的数据。
问题是,在 holoviz 的教程中,使用的方式是把 date_slider.param.value_start 和 date_slider.param.value_end 这两个值绑定到绘图的数据选择上。而在 date_picker 对象中没有类似的参数。虽然使用 date_picker.value[0] 和 date_picker.value[1] 可以用来进行初始绘图,但选择新的值后,绘图并不会更新。那怎样才能正确地把日期选择器小部件绑定到绘图上,以便更新呢?
下面是代码的工作版本和显示问题的结果图片。
import numpy as np
import pandas as pd
import panel as pn
import hvplot.pandas
# create data
df = pd.DataFrame(
{"data": np.random.randint(0, 100, 100), "data2": np.random.randint(0, 100, 100)},
index=pd.date_range(start="2022", freq="D", periods=100),
)
# slider widget - updating
date_slider = pn.widgets.DatetimeRangeSlider(
name="Date Range ",
start=df.index.min(),
end=df.index.max(),
value=(df.index.max() - pd.Timedelta(14, "day"), df.index.max()),
)
# date picker widget - not updating
date_picker = pn.widgets.DatetimeRangePicker(
name="Date Range",
start=df.index.min(),
value=(df.index.max() - pd.Timedelta(14, "day"), df.index.max()),
)
#plotting function
def ts_plot(df, start_val, end_val):
df = df[(df.index > start_val) & (df.index <= end_val)]
hv_plot = df.hvplot(
x="index",
y=["data", "data2"],
)
return hv_plot
# slider binding
slider_plot = pn.bind(
ts_plot, df, date_slider.param.value_start, date_slider.param.value_end
)
#picker binding
picker_plot = pn.bind(ts_plot, df, date_picker.value[0], date_picker.value[1])
# panel layout
slider = pn.Column(date_slider, slider_plot)
picker = pn.Column(date_picker, picker_plot)
pn.Row(slider, picker).servable()
0 个回答
暂无回答