在散景中使用x轴的月份

Mpi*_*ris 4 python bokeh

可以说我有以下数据:

import random
import pandas as pd
numbers = random.sample(range(1,50), 12)
d = {'month': range(1,13),'values':numbers}
df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

我使用散景来显示结果:

 p = figure(plot_width=400, plot_height=400)
 p.line(df['month'], df['values'], line_width=2)
 output_file('test.html')
 show(p)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

结果还可以.我想要的是代表一个月的x轴(1:1月,2:2月......).我正在执行以下操作将数字转换为月份:

import datetime
df['month'] = [datetime.date(1900, x, 1).strftime('%B') for x in df['month']]
p = figure(plot_width=400, plot_height=400)
p.line(df['month'], df['values'], line_width=2)
show(p)
Run Code Online (Sandbox Code Playgroud)

结果是一个空洞的人物.以下也不起作用:

p.xaxis.formatter = DatetimeTickFormatter(format="%B")
Run Code Online (Sandbox Code Playgroud)

知道怎么绕过它吗?

Luk*_*van 7

您有两种选择:

您可以使用日期时间轴:

p = figure(plot_width=400, plot_height=400, x_axis_type='datetime')
Run Code Online (Sandbox Code Playgroud)

并将datetime对象或unix(seconds-since-epoch)时间戳值作为x值传递.

例如 df['month'] = [datetime.date(1900, x, 1) for x in df['month']]

然后DatetimeTickFormatter将修改标签的格式(完整月份名称,数字月份等).那些文档在这里:http://bokeh.pydata.org/en/latest/docs/reference/models/formatters.html#bokeh.models.formatters.DatetimeTickFormatter

第二:

你可以使用类似的分类xaxis

p = figure(x_range=['Jan', 'Feb', 'Mar', ...)
Run Code Online (Sandbox Code Playgroud)

与x_range对应的绘图x值,如:

x = ['Jan', 'Feb', 'Mar', ...]
y = [100, 200, 150, ...]
p.line(x, y)
Run Code Online (Sandbox Code Playgroud)

该用户指南包含分类轴:http://bokeh.pydata.org/en/latest/docs/user_guide/plotting.html#categorical-axes

这是一个例子:

分类轴示例