【发布时间】:2019-04-29 09:58:08
【问题描述】:
我有一个如下格式的 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')
我想知道使用 Bokeh 做同样事情的最有效方法是什么?
我可以像这样策划一个玩家。
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)
我想知道如何让它适用于任意数量的不同名称。同样,我需要它能够适应不同名称数量的变化。
我认为我应该以某种方式使用颜色映射器,但对我究竟如何合并它感到困惑?我还看到还有另一个答案here 对变量进行硬编码 --> 颜色映射,并试图想出最简单的概括这一点的方法。
编辑 - 多线图还需要每个名称的图例,类似于 Seaborn 示例。
下一步是让它工作,以便您可以使用滑块 + 单选按钮动态更改名称和日期范围,但我想先让这个更简单的绘图工作。这就是为什么我不只是坚持使用 Seaborn。
【问题讨论】:
标签: python plot bokeh timeserieschart