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