簡體   English   中英

如何將日期時間軸與 Bokeh image_rgba 元素一起使用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM