【发布时间】:2020-04-22 10:40:54
【问题描述】:
我有一个使用matplotlib.pyplot.plot() 的代码示例,我想复制它以在堆叠条形图上制作阴影条形段。但是,我一直在使用pandas.DataFrame.plot() 而不是matplotlib.pyplot.plot() 制作我所有的其他图形,并且我也想在这里继续。示例代码返回一个BarContainer 对象的元组,pandas.DataFrame.plot() 返回一个AxisSubplot 对象,我不知道如何在两者之间导航。
关于如何从pandas.DataFrame.plot() 中获取BarContainer 对象以便我可以使用它们来复制示例的任何建议?
如果没有,对于如何使用pandas.DataFrame.plot() 在堆叠条形图上为每个彩色条形段添加阴影的目标,有什么建议吗?
使用我的数据,阴影有助于区分相似的颜色,因为我有很多类别和项目,否则结果看起来很相似。 (我知道我也可以找到一种方法来绘制更简单的东西,但这样做对我的探索性数据分析很有帮助。)谢谢!
用于填充堆叠条形图的每个彩色条形段的示例工作代码(来自此处:https://matplotlib.org/examples/pylab_examples/hatch_demo.html):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax2 = fig.add_subplot(111)
bars = ax2.bar(range(1, 5), range(1, 5), color='yellow', ecolor='black') + \
ax2.bar(range(1, 5), [6] * 4, bottom=range(1, 5), color='green', ecolor='black')
patterns = ('-', '+', 'x', '\\', '*', 'o', 'O', '.')
for bar, pattern in zip(bars, patterns):
bar.set_hatch(pattern)
我希望每个彩色条段都有阴影的代码(带有简化数据):
df = pd.DataFrame(np.random.uniform(0,10, size=(5,26)))
df.columns=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
ax = df.plot.barh(stacked=True, width=0.98, figsize=(10,5), cmap='gist_ncar')
【问题讨论】:
-
每种颜色都有 26 个独特的补丁? (还有那么多吗?)
-
@ ALollz - 不,即使只是几个补丁也可以正常工作。目的是更好地区分具有相似颜色的类别,例如,以不同的方式孵化浅绿色、中绿色和深绿色等。为此,可以将相同的图案重复用于不同的颜色,而不是相邻的颜色.
标签: python pandas matplotlib bar-chart stacked