【发布时间】:2020-06-05 01:03:00
【问题描述】:
Bokeh DateRangeSlider 小部件的 step 属性需要 int 值,该值必须是以毫秒为单位的时间值。当步长设置为seconds、minutes、hours、days 或years 时效果很好。但是,我需要滑块上的月分辨率。
当步骤设置为 31 天时,它适用于开始日期,直到 3 月,而不是 1 March 我得到 4 March。然后显示值从每月 1 日开始的偏移越来越大。
我希望能够将两侧的滑块范围设置并显示为始终为每月的第一天,例如1 March、1 April、1 May、1 June 等...就像在 DataFrame 中一样。
考虑以下代码,实现它的最佳方式是什么(可能使用 JS 回调)?
import pandas as pd
from bokeh.plotting import show
from bokeh.models import DateRangeSlider
data = {'date_start': ['201812', '201901', '201902', '201903', '201904', '201905', '201906', '201907', '201908', '201909', '201910', '201911'],
'date_end': [ '201901', '201902', '201903', '201904', '201905', '201906', '201907', '201908', '201909', '201910', '201911', '201912'],
'values' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}
df = pd.DataFrame(data)
df['Start'] = pd.to_datetime(df['date_start'], format='%Y%m')
df['End'] = pd.to_datetime(df['date_end'], format='%Y%m')
start_date = df['Start'].min()
end_date = df['End'].max()
range_slider = DateRangeSlider(start=start_date, end=end_date, value=(start_date, end_date), step=31*24*60*60*1000, title="Date Range", callback_policy = 'mouseup', tooltips = False, width=600)
show(range_slider)import pandas as pd
from bokeh.plotting import show
from bokeh.models import DateRangeSlider
data = {'date_start': ['201812', '201901', '201902', '201903', '201904', '201905', '201906', '201907', '201908', '201909', '201910', '201911'],
'date_end': [ '201901', '201902', '201903', '201904', '201905', '201906', '201907', '201908', '201909', '201910', '201911', '201912'],
'values' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}
df = pd.DataFrame(data)
df['Start'] = pd.to_datetime(df['date_start'], format='%Y%m')
df['End'] = pd.to_datetime(df['date_end'], format='%Y%m')
start_date = df['Start'].min()
end_date = df['End'].max()
range_slider = DateRangeSlider(start=start_date, end=end_date, value=(start_date, end_date), step=31*24*60*60*1000, title="Date Range", callback_policy = 'mouseup', tooltips = False, width=600)
show(range_slider)
【问题讨论】: