使用x_axis_type为“datetime”的Bokeh图形坐标系。

3

我试图在使用x_axis_type='datetime'的Bokeh图中添加一个简单的文本字符串(字形)。

我的代码(仅保留必要部分)如下:

p = figure(plot_width=900, plot_height=380, x_axis_type='datetime')

dt  = date(2003, 3, 15)

p.line(xvals, yvals)

txt = Text(
     # x=some_formatting_function(dt), 
     x=1057005600000, 
     y=0.1, 
     text=["happy day!"],
     text_align="left", 
     text_baseline="middle",
     text_font_size="11pt", 
     text_font_style="italic", 
 )
p.add_glyph(txt)
show(p)

X轴范围/数值(即日期)从2002年到2006年,我想在2003年添加文本。我在上面的代码中显示的X值(即1057005600000——通过试错得出)将标志放在了正确的位置。
但是,我无法直接使用datetime.date来解决这个问题...
是否有一种bokeh函数(或datetime.date的属性)可以提供bokeh图所期望的值?
非常感谢。
注:我尝试使用x = bokeh.properties.Date(dt),但这给了我:
ValueError: expected an element of either String, 
Dict(String, Either(String, Float)) or Float, got <bokeh.properties.Date object 
2个回答

2

当 x_axis_type 属性设置为 'datetime' 时,Bokeh 将根据从纪元开始的秒数沿着 x 轴绘制图形。最简单的解决方案是使用 datetime.datetime(而不是 .date),然后使用 timestamp() 方法将您的 dt 对象转换为从纪元开始的秒数(这将给出您获得的 ~1.50e9 数字),然后将其用作 x 坐标。

$ from datetime import datetime
$ dt = datetime.now()
$ dt
> datetime.datetime(2015, 6, 17, 10, 41, 34, 617709)
$ dt.timestamp()
> 1434555694.617709

你的回答对于Python3是正确的--如果我意识到我的问题是版本特定的,我一开始就会标记它--非常感谢你指引我正确的方向! - user908094
我忘记了那将是一个特定于Python2/3的答案。谢谢提醒。 - Luke Canavan

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接