在Bokeh應用中處理日期和時間范圍選擇通常需要使用DateRangeSlider
或DateRangeInput
等工具。以下是一個簡單的示例代碼,展示如何在Bokeh應用中處理日期和時間范圍選擇:
from bokeh.layouts import column
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, curdoc
from bokeh.models.widgets import DateRangeSlider
from bokeh.io import output_file, show
# 創建一個示例數據集
data = {
'date': pd.date_range(start='1/1/2020', periods=100),
'value': np.random.randint(0, 100, 100)
}
source = ColumnDataSource(data)
# 創建一個日期范圍選擇器
date_range_slider = DateRangeSlider(title="Date Range", start=data['date'][0], end=data['date'][-1], value=(data['date'][20], data['date'][80]))
# 創建一個圖表
p = figure(x_axis_type="datetime", plot_height=350)
p.line(x='date', y='value', source=source)
# 定義一個回調函數,根據日期范圍選擇器的值更新數據源
def update_data(attr, old, new):
start_date = pd.Timestamp(date_range_slider.value[0])
end_date = pd.Timestamp(date_range_slider.value[1])
new_data = {
'date': data['date'][(data['date'] >= start_date) & (data['date'] <= end_date)],
'value': data['value'][(data['date'] >= start_date) & (data['date'] <= end_date)]
}
source.data = new_data
date_range_slider.on_change('value', update_data)
# 將圖表和日期范圍選擇器組合在一起
layout = column(date_range_slider, p)
curdoc().add_root(layout)
在這個示例中,我們首先創建了一個包含日期和數值的示例數據集,并使用DateRangeSlider
創建了一個日期范圍選擇器。然后創建了一個圖表,并定義了一個回調函數update_data
,根據日期范圍選擇器的值更新數據源。最后,將圖表和日期范圍選擇器放在一個布局中,并將其添加到Bokeh應用中。