У меня есть Pandas DataFrame следующего формата
name - date - score
A - 1/1/10 - 100
A - 1/2/10 - 200
A - 1/3/10 - 300
B - 1/1/10 - 150
B - 1/2/10 - 400
B - 1/3/10 - 600
Я хочу создать график Боке с датой по оси x, оценкой по оси y и отдельной линией + цветом для каждого имени. Я работаю с ноутбука Jupyter.
Вот некоторые тестовые данные, хотя я хочу получить что-то, что работает для произвольного количества/значений в имени, а не только для A и B.
import pandas as pd
import datetime
test_data = {'name':['A','A','A','B','B','B'],
'date':[datetime.date(2010,1,1),
datetime.date(2010,2,1),
datetime.date(2010,3,1),
datetime.date(2010,1,1),
datetime.date(2010,2,1),
datetime.date(2010,3,1),],
'score':[100,200,300,150,400,600]}
plot_df = pd.DataFrame(test_data)
Используя Seaborn, я бы сделал так.
import seaborn as sns
ax = sns.lineplot(data=plot_df, x='date',y='score',hue='name')
Мне интересно, как наиболее эффективно сделать то же самое с помощью боке?
Я могу построить одиночный игрок, как это.
import bokeh.plotting as bp
bp.output_notebook()
filtered_df = plot_df[plot_df.player == 'A'].sort_values(by=['date'])
plot_ds = bp.ColumnDataSource(filtered_df)
plot = bp.figure()
plot.line('date','score',source=plot_ds)
bp.show(plot)
Мне интересно, как заставить это работать для произвольного количества разных имен. Опять же, мне нужно, чтобы он был устойчивым к изменению количества различных имен.
Я думаю, что мне следует как-то использовать цветовую карту, но я не понимаю, как именно я ее включаю? Я также вижу, что есть еще один ответ здесь, который жестко кодирует переменную --> сопоставление цветов и пытается подумайте о самом простом способе обобщить это.
РЕДАКТИРОВАТЬ - многострочной диаграмме также потребуется легенда для каждого имени, как в примере Seaborn.
Следующим шагом будет заставить это работать, чтобы вы могли динамически изменять имена и диапазон дат с помощью ползунка + переключателей, но я хочу, чтобы сначала работал этот более простой график. Вот почему я не просто придерживаюсь Seaborn.