如何更改 DataFrame 中堆叠区域图的填充颜色?

How can I change the filled color of stacked area plot in DataFrame?

我想更改用 Pandas.Dataframe 绘制的堆叠区域图中的填充颜色。

import pandas as pd
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
ax = df.plot.area(linewidth=0);

The area plot example

现在我猜 plot 函数的实例 return 提供了修改颜色等属性的权限。

但是坐标轴 类 太复杂了,学不会很快。而我在Stack Overflow中也没有找到类似的问题。

所以哪位高手能帮个忙吗?

使用'colormap'(详见document):

ax = df.plot.area(linewidth=0, colormap="Pastel1")

matplotlib的API确实很复杂,但是这里artist Module给出了一个非常通俗易懂的例子。对于 bar/barh 图,可以通过 .patches 访问和修改属性,但对于面积图,它们需要 .collections.

要实现具体的修改,使用这样的代码。

import pandas as pd
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
ax = df.plot.area(linewidth=0);

for collection in ax.collections:
    collection.set_facecolor('#888888')

highlight = 0
ax.collections[highlight].set_facecolor('#aa3333')

collections的其他方法可以参考运行

dir(ax.collections[highlight])

诀窍是使用 'color' 参数:

解决方案 1:字典
只需传递 {column name: color}

的字典
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'], )

ax = df.plot.area(color={'b':'0', 'c':'#17A589', 'a':'#9C640C', 'd':'#ECF0F1'})

解决方案 2:序列
只需传递一系列颜色代码(它将匹配您的列的顺序)。

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'], )

ax = df.plot.area(color=('0', '#17A589', '#9C640C', '#ECF0F1'))

无需设置线宽(会自动调整颜色)。此外,这不会与图例混淆。