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

时间:2019-10-25 21:43:00

标签: python bokeh

我有一个整齐的熊猫数据框“ df”,就像这样

 <html>
  <body>
 <a href="https://firebasestorage.googleapis.com/v0/b/speech-to-text-web.appspot.com/o/dataset%2FAbuse%2Fabusar_x264_0.mp4? 
  alt=media&token=e84607c8-ba77-4c81-99a4-bd42d29cc869" 
  download>click</a>
 </body>
 </html>
 

我想用散景绘制线条,每个国家/地区都有自己的线条和颜色。

执行此操作的一种方法似乎是在 <html> <body> <a href="https://firebasestorage.googleapis.com/v0/b/speech-to-text-web.appspot.com/o/dataset%2FAbuse%2Fabusar_x264_0.mp4? alt=media&token=e84607c8-ba77-4c81-99a4-bd42d29cc869" download>click</a> </body> </html> 上使用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')

这也不是很优雅,尤其是因为实际上我的玩具比上面玩具示例中的两个要多。

用bokeh实现此目的的正确方法是什么?

1 个答案:

答案 0 :(得分: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, )