使用`line`与`multi_line`在散景中绘制许多(不同颜色的)线

问题描述 投票:0回答:1

我有一个整齐的熊猫数据框'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实现此目的的正确方法是什么?

python bokeh
1个回答
0
投票
简短而优雅:

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, )

© www.soinside.com 2019 - 2024. All rights reserved.