[英]How to use a datetime axis with a Bokeh image_rgba element?
我有一種情況,我想用日期時間軸生成 Bokeh image_rgba 圖。 當我嘗試此操作時,使用類似於以下代碼的內容:
p1 = figure(x_axis_type = 'datetime', y_axis_type = 'datetime',
x_range = [min(dates),max(dates)],
y_range = [min(dates),max(dates)],
x_axis_label = 'Purchase Date', y_axis_label = 'Sell Date',
plot_width = 500, plot_height = 500)
p1.image_rgba(image = [plotmatrix], x = [min(dates)], y = [min(dates)], dh = [max(dates)-min(dates)], dw = [max(dates)-min(dates)])
p1.grid.grid_line_color = None
show(p1)
我收到以下錯誤:
TypeError: Timedelta('2139 days 00:00:00') is not JSON serializable
plotmatrix
變量是一個方形 numpy 矩陣,其數據類型為 uint32,它已根據示例中的 RGBA 值打包
http://docs.bokeh.org/en/latest/docs/gallery/image_rgba.html 。
解決這個問題的推薦方法是什么。 我意識到我的一個選擇是將所有時間都轉換為 unixtime,基於秒繪制數據,然后找到某種軸標簽格式化程序來生成正確的時間信息。 但是關於這個解決方案的某些東西對我來說似乎有點太hackish了。
最近在PR #8027
處理 Pandas PeriodIndex 和 Timedelta 中解決了TimeDelta
的不可序列化問題。 截至 2018 年 7 月,此修復程序尚未包含在任何正式版本中。 它將成為 2018 年第三季度即將發布的 1.0 版本的一部分。
或者,如果您想手動將 timedelta 值直接轉換為 Bokeh 始終可以理解的格式,則以下函數(即上述 PR 所做的全部)將起作用:
def convert_timedelta_type(obj):
''' Convert any recognized timedelta value to floating point absolute milliseconds.
Arg:
obj (object) : the object to convert
Returns:
float : milliseconds
'''
if isinstance(obj, dt.timedelta):
return obj.total_seconds() * 1000.
elif isinstance(obj, np.timedelta64):
return (obj / np.timedelta64(1, 'ms'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.