Bokeh可视化笔记——x轴设为日期

Bokeh是一个很好用的可视化工具库,画出来的图还是不错滴。比如想画历史上所有合约的螺纹-热卷价差。

整体质感还是不错的,比matplot好看,而且可以放大缩小,可以点击标签来选择是否显示。比如:

数据处理部分就不说了,这里应为我们是一个金融数据,x轴设置为日期。随便百度一下百度不到设置方法,所以找了一下官方的一些例子才实现。于是笔者实现之后来写个教程。

大致来看一下绘图的函数吧。

def plot_month_diff_line(plot_df, contract_df):
    def datetime(x):
        return np.array(x, dtype=np.datetime64)
    # x = list(range(max([len(plot_df[col].dropna()) for col in plot_df.columns])))
    x = date_list
    x = [item.date() for item in x]
    # 创建画布
    p = figure(x_axis_type="datetime",
       tools="pan,box_zoom,reset,save", y_range=[plot_df.min().min() * 1.05, plot_df.max().max() * 1.05], title="commodity monitor",
       x_axis_label='time', y_axis_label='value', plot_height=700,  plot_width=1400)
    colors = itertools.cycle(palet.Category20[20])
    for leg,color in zip(plot_df.columns, colors):
        p.line(datetime(x), plot_df[leg].tolist(), legend=leg, line_width=3, line_color=color)
    p.legend.label_text_font_size = "10pt"
    p.legend.click_policy="hide"
    return p

这里,我们的x是一个日期序列,笔者一开始以为只要将x的数据格式设置为时间格式就可以,后来发现还是太天真。这一点,需要bokeh改进一下。

在bokeh中,我们需要在设置绘图画布的时候,制定x轴类型为“datetime”

 p = figure(x_axis_type="datetime",
       tools="pan,box_zoom,reset,save", y_range=[plot_df.min().min() * 1.05, plot_df.max().max() * 1.05], title="commodity monitor",
       x_axis_label='time', y_axis_label='value', plot_height=700,  plot_width=1400)

然后传入的时间序列需要有个函数进行转换:

    def datetime(x):
        return np.array(x, dtype=np.datetime64)

当然,如果原来的x就是datetime64位的格式那就不需要。

猜你喜欢

转载自blog.csdn.net/qtlyx/article/details/111593294
今日推荐