brewer.py конвертировать ось X в даты - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь изменить этот пример на ось X с датами, чтобы понять концепции боке.https://bokeh.pydata.org/en/latest/docs/gallery/brewer.html

N = 4
cats = 3
data = [[2,3,4], [2,2,3], [0,0,0], [1,2,3]]
df = pd.DataFrame(data, columns=['y0', 'y1', 'y2'])

print df
dates = ['2016-06-01','2016-06-02','2016-06-03','2016-06-04']

def stacked(df):
    df_top = df.cumsum(axis=1)
    df_bottom = df_top.shift(axis=1).fillna({'y0': 0})[::-1]
    df_stack = pd.concat([df_bottom, df_top], ignore_index=True)
    return df_stack

areas = stacked(df)
colors = brewer['Spectral'][areas.shape[1]]
x2 = np.hstack((df.index[::-1], df.index))
p = figure(x_range=(0, N-1), y_range=(0, 50))
# p.xaxis.major_label_overrides = {
#     i: date.strftime('%b %d') for i, date in enumerate(pd.to_datetime(dates))
# }
# p.xaxis.bounds = (0, df.index[-1])
p.grid.minor_grid_line_color = '#eeeeee'

p.patches([x2] * areas.shape[1], [areas[c].values for c in areas],
          color=colors, alpha=0.8, line_color=None)

output_file('brewer.html', title='brewer.py example')

show(p)

Итак, в приведенном выше примере я получаю ось х 0,1,2,3 и могу увеличить.

Как мне изменить это на сегодняшний день.Могу ли я сделать что-то вроде x_range=dates, просто просмотреть список дат.Я пробовал с закомментированным кодом, но он не обновляет второстепенные метки, и я не могу увеличить масштаб. Должны ли даты быть в df'? Currently my df` равно

   y0  y1  y2
0   2   3   4
1   2   2   3
2   0   0   0
3   1   2   3

И если dates должно бытьв df Я могу добавить, как показано ниже

   y0  y1  y2        date
0   2   3   4  2016-06-01
1   2   2   3  2016-06-02
2   0   0   0  2016-06-03
3   1   2   3  2016-06-04

Но все еще не уверен, как построить эти даты на оси X.

1 Ответ

0 голосов
/ 06 июня 2018

вы можете использовать x_axis_type = 'datetime' внутри функции bokeh.plotting.figure, чтобы указать, что ваша ось x будет отображать время.

import pandas as pd
import numpy as np
import bokeh
import bokeh.plotting

N = 4
cats = 3
data = [[2,3,4], [2,2,3], [0,0,0], [1,2,3]]
df = pd.DataFrame(data, columns=['y0', 'y1', 'y2'])

print df
dates = ['2016-06-01','2016-06-02','2016-06-03','2016-06-04']
dt = [pd.datetime.strptime(x,'%Y-%m-%d') for x in dates]
def stacked(df):
    df_top = df.cumsum(axis=1)
    df_bottom = df_top.shift(axis=1).fillna({'y0': 0})[::-1]
    df_stack = pd.concat([df_bottom, df_top], ignore_index=True)
    return df_stack

areas = stacked(df)
colors = bokeh.palettes.brewer['Spectral'][areas.shape[1]]

x2 = np.hstack((dt[::-1], dt))
p = bokeh.plotting.figure(x_axis_type='datetime', y_range=(0, 10))

p.xaxis.formatter = bokeh.models.formatters.DatetimeTickFormatter(
    days=["%Y-%m-%d"])

p.grid.minor_grid_line_color = '#eeeeee'

p.patches([x2] * areas.shape[1], [areas[c].values for c in areas],
          color=colors, alpha=0.8, line_color=None)
bokeh.io.output_file('brewer.html', title='brewer.py example')

bokeh.io.show(p)

enter image description here

...