линейный график боке для 3 линий - PullRequest
0 голосов
/ 24 мая 2019

У меня есть данные за разные годы и месяцы, которые нужно отобразить в виде 3-х строчного графика в зависимости от категории, а ось X будет (jan, feb ....... dec) продажи по оси Y. Я не понимаю, как это сделать, так как я новичок в Bokeh и Python. Может кто-нибудь мне помочь, пожалуйста?

import pandas as pd
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource
from datetime import datetime
from bokeh.palettes import Spectral3

output_file('output.html')

df = pd.read_csv('sample.csv')
p = figure(x_axis_type="date")
p.line(x=df.date, y=df.sales, line_width=2)

show(p)

Это данные, которые у меня есть.

enter image description here

1 Ответ

0 голосов
/ 24 мая 2019

Вы должны преобразовать содержимое столбца Даты в Даты.Панды и Боке не знают, что эти значения являются датами, и обрабатывают их как строки, если вы забудете это сделать.Кроме того, x_axis_type должен быть datetime вместо date.

import pandas as pd
from bokeh.plotting import figure, show
from bokeh.palettes import Spectral3

data = {'Date': ['08-11-2016', '08-11-2016', '12-06-2016', '11-08-2015', '11-10-2015', '09-06-2014', '09-02-2014', '09-01-2014', '09-06-2014', '09-03-2014', '09-05-2014', '09-07-2014', '15-04-2017', '05-12-2016', '22-09-2015', '26-12-2015', '02-01-2015', '02-01-2015', '28-10-2016'],
'Sales': [261.96, 731.94, 14.62,957.5775, 22.368, 48.68, 7.28, 907.152, 18.504, 114.9, 1706.184, 911.424, 15.552, 407.976, 68.81, 2.544, 665.88, 55.5, 8.56],
'Category': ['Furniture', 'Furniture', 'Office Supplies', 'Furniture', 'Office Supplies', 'Furniture', 'Office Supplies', 'Technology', 'Office Supplies', 'Office Supplies', 'Furniture', 'Technology', 'Office Supplies', 'Office Supplies', 'Office Supplies', 'Office Supplies', 'Office Supplies', 'Office Supplies', 'Office Supplies']}
df = pd.DataFrame.from_dict(data)
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values(by='Date')
categories = df['Category'].unique()

p = figure(x_axis_type="datetime")
for cat, color in zip(categories, Spectral3):
    df_line = df.loc[df['Category'] == cat]    
    p.line(x='Date', y='Sales', line_width=2, source=df_line, legend=cat, color=color)
p.legend.click_policy="hide"
show(p)

enter image description here

(Технологические и офисные принадлежности также нанесены на график, их просто трудно увидетьиз-за короткого диапазона х / цвет)

...