2016-02-24 3 views
2

Допустим, у меня есть следующие данные:Использование месяцев в оси х в боке

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

Я использую боке визуализировать результаты:

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

enter image description here

Результаты исправны , Я хочу, чтобы ось x представляла месяц (1 января, 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) 

Результаты представляют собой пустую цифру. Следующие также не работают:

p.xaxis.formatter = DatetimeTickFormatter(format="%B") 

Любая идея как его преодолеть?

ответ

3

У вас есть два варианта:

Вы можете использовать ось даты-времени:

p = figure(plot_width=400, plot_height=400, x_axis_type='datetime') 

И передать либо datetime объекты или Unix (секунды-Since-эпохи) метки времени значения, х значений.

например. 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', ...) 

Сюжет х-значение, которые соответствуют вашему x_range, как:

x = ['Jan', 'Feb', 'Mar', ...] 
y = [100, 200, 150, ...] 
p.line(x, y) 

Руководство пользователя охватывает осевые топоры здесь: http://bokeh.pydata.org/en/latest/docs/user_guide/plotting.html#categorical-axes

Вот пример того, что:

Categorical Axis example

Смежные вопросы