散景字形坐标与x_axis_type'datetime'

时间:2015-06-17 12:54:52

标签: python-2.7 datetime bokeh

我正在尝试将一个简单的文本字符串(字形)添加到使用x_axis_type='datetime'

的散景图中

我的代码(剥离其基本要素)如下:

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 ...

是否有散景函数(或datetime.date的属性)会给出散景图所期望的值?

非常感谢。

N.B。我尝试过使用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 个答案:

答案 0 :(得分:2)

当x_axis_type attr设置为&#39; datetime&#39;时,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

答案 1 :(得分:0)

对于我的问题的python2回答,请参阅以下SO问题/答案:

How can I convert a datetime object to milliseconds since epoch (unix time) in Python?

谢谢你@Luke Canavan指出我正确的方向(!)