Bokeh中X轴上的日期时间

时间:2018-02-08 17:09:21

标签: python bokeh

我无法理解日期在Bokeh中的运作方式。

我的代码在x轴上输出毫秒,如果轴类型是' datetime',这似乎是默认值,但我希望每隔5年将它分开。

如何在Bokeh中完成此操作?日期是在1950年之前,所以我不能使用时间戳。当我排除日期时间轴类型时,它会将每个值显示为x轴上的刻度。当我尝试将输入的数据更改为日期时间对象时,Bokeh拒绝它。

我已经阅读了有关该主题的其他帖子,以及Bokeh的文档 DatetimeTickFormatter,它似乎也不适合我。

Datetime axis in Bokeh

Bokeh FixedTicker with Custom Datetime/Timestamp values

https://bokeh.pydata.org/en/latest/docs/reference/models/formatters.html

该剧情的所有代码如下:

r = requests.get('https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json')
    data = json.loads(r.text)

chart_data = {
    'date': [a[0] for a in data['data']], #this is the problem data
    'gdp': [a[1] for a in data['data']],
}

source = ColumnDataSource(chart_data)
hover = HoverTool(
    tooltips=[
        ('GDP', '@gdp{$0,0.00}'),
        ('Date', '@date{%Y - %B}'),
    ],
    formatters={
        'date' : 'datetime',
    }
)

bar = figure(x_range=chart_data['date'],
             x_axis_type='datetime',
             plot_height=750,
             plot_width=1000,
             tools='wheel_zoom, reset, save',
             title=data['source_name'])
bar.vbar(x='date', top='gdp', width=0.9, source=source)
bar.add_tools(hover)

#visual settings

bar.xaxis.formatter = DatetimeTickFormatter(years = ['%Y'])
bar.xaxis.major_label_orientation = 'vertical'
bar.xaxis.minor_tick_line_color = None
bar.xgrid.grid_line_color = None

bar.yaxis.formatter = NumeralTickFormatter(format='$0,0.00')
bar.ygrid.grid_line_color = None

show(bar)

谢谢你的帮助,这让我疯狂!

1 个答案:

答案 0 :(得分:1)

感谢bigreddot的帮助。我的问题是由于我设置了x_range属性而不是默认为datetime,因此我的情节作为分类范围。