Python 使用周期对象更新Bokeh范围

Python 使用周期对象更新Bokeh范围,python,pandas,datetime,bokeh,Python,Pandas,Datetime,Bokeh,假设我有一个数据帧行\u src\u yr如: Date Value 2017 100 2018 200 Date Value 2017Q1 25 2017Q2 25 2017Q3 25 2017Q4 25 2018Q1 100 2018Q2 100 以及第二数据帧dfQtr,如: Date Value 2017 100 2018 200 Date Value 2017Q1 25 2017Q2 25 2017Q3 25 2017Q4 25 2018Q1 100

假设我有一个数据帧
行\u src\u yr
如:

Date Value
2017 100
2018 200
Date   Value
2017Q1  25
2017Q2  25
2017Q3  25
2017Q4  25
2018Q1  100
2018Q2  100
以及第二数据帧dfQtr,如:

Date Value
2017 100
2018 200
Date   Value
2017Q1  25
2017Q2  25
2017Q3  25
2017Q4  25
2018Q1  100
2018Q2  100
我希望能够使用单选按钮在绘图下面的数据帧之间切换:

QtrLineSrc=ColumnDataSource(data=dfQtr)
line_src_yr=ColumnDataSource(data=line_df_yr)

if radio_group.active==0:
    p_line.xaxis_type='datetime'             
    p_line.xaxis.formatter=DatetimeTickFormatter(days=["%Y"])
    line_src_yr.data={"Date":line_df_yr["Date"],"Value":line_df_yr['Value']}
elif radio_group.active==1:
    line_src_yr.data=QtrLineSrc.data
    p_line.x_range=list(set(dfQtr["Date"]))

radio_group=RadioGroup(labels=["Annual","Quarter"], active =0)
radio_group.on_change('active', update)

p_line=figure(plot_width= 750, plot_height=450)
p_line.line(x="Date",y="Value", source=line_src_yr)
但我明白了

:运行应用程序处理程序时出错:无法识别的范围输入:“[期间('2017Q3','Q-DEC')、期间('2018Q1','Q-DEC')、期间('2018Q2','Q-DEC')、期间('2017Q4','Q-DEC')、期间('2017Q1','Q-DEC')、期间('2018Q4','Q-DEC')、期间('2017Q2','Q-DEC')”


我怀疑这是由于
dfQtr
不是
datetime
,但如果我尝试转换成这样,它会产生
不能转换为datetime
对Pandas
Period的支持,直到最近才在年才添加。到今天为止,这比Bokeh的任何完整版本都要新。这项工作将作为2018年10月下旬下一版本的一部分

但是,仔细观察,似乎您正在尝试从列表中设置范围

p_line.x_range = list(set(dfQtr["Date"])) # not valid
这永远不是有效的用法。它类似于分类范围的用法。如果您的绘图有一个分类范围,则您可能需要以下内容:

p_line.x_range.factors = [str(x) for x in set(dfQtr["Date"])]
请注意,分类值只能是字符串。如果您使用的是分类范围,则可以通过将
句点
对象转换为您希望它们具有的任何字符串表示形式来实现。如果你没有使用分类范围,那么不清楚你想要达到什么