【问题标题】:Datetime on an X Axis in Bokeh散景中 X 轴上的日期时间
【发布时间】:2018-02-08 17:09:20
【问题描述】:

我无法理解日期时间在 Bokeh 中的工作原理。

我的代码在 x 轴上输出毫秒数,如果轴类型是“日期时间”,这似乎是默认值,但我希望每隔 5 年将其分隔一次。

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

我已阅读有关该主题的其他帖子,以及 Bokeh 关于 DatetimeTickFormatter,这似乎也不适合我。

Datetime axis in Bokeh

Bokeh FixedTicker with Custom Datetime/Timestamp values

https://docs.bokeh.org/en/latest/docs/reference/models/formatters.html?highlight=formatters#module-bokeh.models.formatters

我所有的情节代码如下:

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)

感谢您的帮助,这让我发疯了!

【问题讨论】:

  • chart_data['date'] 到底是什么?
  • 感谢您的帮助!如果您查看链接中的 json,日期格式为 '%Y-%m-%d'。例如:“1947-01-01”。 raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/…
  • 传递一系列字符串会导致分类范围,这就是日期时间轴不起作用的原因,以及显示所有值的原因(分类轴显示所有因素)。我建议转换为 Bokeh 将处理的真实日期时间对象。然后,如果您不想要可以使用的标准日期时间代码,例如 YearsTicker
  • 所以我转换为日期时间对象,但 Bokeh 给了我一个 ValueError。 "ValueError("无法识别的范围输入:'%s'" % str(range_input))"。我更改了:'date': [datetime.strptime(a[0], '%Y-%m-%d') for a in data['data']] 这是不正确的吗?
  • 不要再设置x_range。对于真正的日期时间对象,默认的 DataRange1d 就是您想要的。

标签: python bokeh


【解决方案1】:

感谢 bigreddot 的帮助。我的问题是,由于我设置了 x_range 属性,而不是默认为日期时间,我的情节充当了分类范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2013-07-21
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多