Python 如何使用Pandas定位3个堆叠条形图
我正在尝试创建一个包含三个堆叠条形图的图形,如下所示: 我实际上有两个问题: 1) 我试图在Pandas的数据框中使用'position'参数,但这些条仍然重叠。除了减少钢筋宽度,还有其他选择吗 2) 这三个条有三个共同的类别(B、C、D、E),我怎么能有一个只包含实际六个不同类别的图例 我的数据帧是:Python 如何使用Pandas定位3个堆叠条形图,python,pandas,dataframe,matplotlib,Python,Pandas,Dataframe,Matplotlib,我正在尝试创建一个包含三个堆叠条形图的图形,如下所示: 我实际上有两个问题: 1) 我试图在Pandas的数据框中使用'position'参数,但这些条仍然重叠。除了减少钢筋宽度,还有其他选择吗 2) 这三个条有三个共同的类别(B、C、D、E),我怎么能有一个只包含实际六个不同类别的图例 我的数据帧是: A B C D E F 0 0.108858 0.265929 0.537369 2
A B C D E F
0 0.108858 0.265929 0.537369 2.183963 1.353575 2.938775
1 0.375641 0.198720 0.266806 0.409179 0.286645 0.636405
2 1.179256 0.808986 0.171202 0.946194 0.506783 2.121366
3 1.510399 1.218619 0.307752 0.819865 1.283067 0.213556
我的测试代码是:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame(abs(np.random.randn(4, 6)), columns=list('ABCDEF'))
print(df)
colors1 = ['#a50f15', '#9ecae1', '#6baed6', '#3182bd']
colors2 = ['#fb6a4a', '#9ecae1', '#6baed6', '#3182bd']
colors3 = ['#fcbba1', '#9ecae1', '#6baed6', '#3182bd']
fig, ax = plt.subplots(figsize=(8,6))
df.plot(ax=ax, y=['A', 'B', 'C', 'D'], kind='bar', stacked=True, width=0.15, color=colors1, position=0)
df.plot(ax=ax, y=['E', 'B', 'C', 'D'], kind='bar', stacked=True, width=0.15, color=colors2, position=0.5)
df.plot(ax=ax, y=['F', 'B', 'C', 'D'], kind='bar', stacked=True, width=0.15, color=colors3, position=1)
ax.legend(ncol=3)
plt.tight_layout()
plt.show()
对于第二个问题,您可以执行以下操作:
ax.legend(ncol=3,labels=['A','B','C','D','E','F'])
将position参数更改为-0.5,0.5,1.5会得到您想要的吗?实际上是这样,谢谢!!我从未尝试过负值,因为文档中说:“位置:浮点指定条形图布局的相对对齐。从0(左/底端)到1(右/顶端)。默认值为0.5(中心)”@HamzaHaider。最后一个标签颜色不正确: