python 堆积面积图散景

python Stacked area chart Bokeh

我正在尝试创建一个堆积面积图,它按国家/地区显示客户数量。

所以我的数据框是:

date        people  country
2021-11-18  509     USA
2021-11-18  289     France 
2021-11-18  234     Germany
2021-11-18  148     Poland
2021-11-18  101     China

我不懂如何编辑图形设计(颜色)。

table.groupby(['date','country'])['people'].sum().unstack().plot(
    kind='area',
    figsize=(10,4))

我也尝试使用 Bokeh 库来实现漂亮的可视化,但我不知道如何编写代码

感谢您的帮助。这是我的第一个 post。对不起,如果我错过了什么。

您应该为源添加颜色,或者您可以在散景中使用调色板。请检查 here.

我认为您正在 bokeh.

中寻找 varea_stack()-函数

我的解决方案基于varea_stack-example,这是官方文档的一部分。

假设这是您的数据(我在当天添加的):

text = """date        people  country
2021-11-18  509     USA
2021-11-18  289     France 
2021-11-18  234     Germany
2021-11-18  148     Poland
2021-11-18  101     China
2021-11-19  409     USA
2021-11-19  389     France 
2021-11-19  134     Germany
2021-11-19  158     Poland
2021-11-19  191     China"""

首先我将数据以与示例相同的形式引入:

from io import StringIO
import pandas as pd

df = pd.read_csv(StringIO(text), sep='\s+', parse_dates=True, index_col=0)

df = df.groupby(['date','country']).sum().unstack()
df.columns = df.columns.droplevel(0)
df.index.name=None
df.columns.name=None

现在 DataFrame 看起来像这样:

            China  France  Germany  Poland  USA
2021-11-18    101     289      234     148  509
2021-11-19    191     389      134     158  409

现在剩下的就很简单了。如果您的索引是 DatetimeIndex,则必须修改散景图的 x_axis_type。我为下面的情节做了这个。

from bokeh.palettes import brewer
from bokeh.plotting import figure, show, output_notebook
output_notebook()

n = df.shape[1]
p = figure(x_axis_type='datetime')
p.varea_stack(stackers=df.columns, x='index', source=df, color=brewer['Spectral'][n],)
show(p)

输出如下所示:

您可以根据需要使用 color 关键字重新定义颜色。