Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Pandas定位3个堆叠条形图_Python_Pandas_Dataframe_Matplotlib - Fatal编程技术网

Python 如何使用Pandas定位3个堆叠条形图

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

我正在尝试创建一个包含三个堆叠条形图的图形,如下所示:

我实际上有两个问题:

1) 我试图在Pandas的数据框中使用'position'参数,但这些条仍然重叠。除了减少钢筋宽度,还有其他选择吗

2) 这三个条有三个共同的类别(B、C、D、E),我怎么能有一个只包含实际六个不同类别的图例

我的数据帧是:

          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。最后一个标签颜色不正确: