我有一个整齐的熊猫数据框'df',像这样
date population country
Feb. 1 2000 99999 Canada
Feb. 1 2000 98765 Spain
Feb. 2 2000 99998 Canada
...
我想用散景做线图,每个国家都有自己的线和颜色。
执行此操作的一种方法似乎是对legend
使用line()
关键字为每个国家/地区给我不同的一行:
source = ColumnDataSource(df)
plot = figure(...)
plot.line(x='date', y='count', source=source, legend='country')
不幸的是,似乎没有为每个国家/地区选择颜色的直接方法...
并且由于有multi_line()
绘图功能,这似乎是我应该使用的功能。但是,我不知道执行此操作的简单方法。类似以下内容可以工作:
plot.multi_line(xs=[df['date'], df['date']],
ys=[df[df['country']=='Canada'],
df[df['country']=='Canada']],
colors=['red', 'blue'])
这看起来也不是很优雅,特别是因为实际上我的玩具比上面玩具示例中的两个要多。
使用bokeh实现此目的的正确方法是什么?
from bokeh.palettes import Category10
groups = df.groupby('country')
p = figure(x_axis_type = "datetime")
p.multi_line(xs = [df.date for i, df in groups],
ys = [df.population for i, df in groups],
line_color = Category10[10][0: len(groups)],)
更优雅:
from bokeh.palettes import Category10 groups = df.groupby('country') data = {'date': [], 'population': [], 'legend': []} for i, df in groups: data['date'].append(df.date.tolist()) data['population'].append(df.population.tolist()) data['legend'].append(i) data['color'] = Category10[10][0: len(groups)] p = figure(x_axis_type = "datetime") p.multi_line(xs = 'date', ys = 'population', line_color = 'color', legend = 'legend', source = data, )