如何使用颜色和填充图案绘制matplotlib(pandas)条形图?

11

我该如何为我的数据应用不同的填充图案,就像我可以定义不同的颜色元组一样?

#!/usr/bin/env python3
import pandas
from matplotlib import pyplot as plt

data = {"Label 1": [2,3,5,10], "Label 2": [1,2,4,8]}
pandas.DataFrame(data).plot.bar(color=("grey", "white"), hatch=("/", "*"))
plt.show()

使用这段代码,Hatches将应用于所有条形图。

Hatches将同时应用于所有条形图。相反,我更希望每个数据集都使用自己的hatch-color组合。

我知道我可以像这样手动修改绘图中的每个patch:

ax = pandas.DataFrame(data).plot.bar(color=("grey", "white"), legend=False)
for container, hatch in zip(ax.containers, ("/", "*")):
    for patch in container.patches:
        patch.set_hatch(hatch)
ax.legend(loc='upper center')
plt.show()

手动设置填充图案:

这有点取巧,但是我通过这个讨论找到了最好的解决方案。

在组合图中应用不同数据集的填充图案的正确方法是什么?


好的,感谢@ImportanceOfBeingErnest的帮助,我再次编辑了我的帖子,他可能已经很好地回答了我的问题。但也许会出现更好的答案。 - Pokulo
1
关键问题是当手动设置容器中每个补丁的填充时,图例绘制没有改变。但是在稍后手动禁用和绘制图例后,它也符合填充颜色。 - Pokulo
1个回答

1

您可以单独绘制每个系列:

import pandas as pd
from matplotlib import pyplot as plt

data = pd.DataFrame({"Label 1": [2, 3, 5, 10], "Label 2": [1, 2, 4, 8]})
data['Label 1'].plot.bar(legend=True, label='Label 1', color="red", width=-0.2, align='edge', hatch='/')
data['Label 2'].plot.bar(legend=True, label='Label 2', color="green", width=0.2, align='edge', hatch='*')
plt.show()

Resulting plot


不错,我有点觉得这不会创建一个组合图。好的解决方案。谢谢。 - Pokulo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接