Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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 将两个堆叠条形图合并为一个分组的堆叠条形图_Python_Pandas_Matplotlib_Data Visualization_Visualization - Fatal编程技术网

Python 将两个堆叠条形图合并为一个分组的堆叠条形图

Python 将两个堆叠条形图合并为一个分组的堆叠条形图,python,pandas,matplotlib,data-visualization,visualization,Python,Pandas,Matplotlib,Data Visualization,Visualization,因此,我在网上找到了以下代码: import matplotlib.pyplot as plt import matplotlib matplotlib.style.use('ggplot') plotdata = pd.DataFrame({ "2018_m":[40, 12, 10, 26, 36], "2019_m":[19, 8, 30, 21, 38], "2020_m":[10, 10, 42,

因此,我在网上找到了以下代码:

import matplotlib.pyplot as plt
import matplotlib

matplotlib.style.use('ggplot')

plotdata = pd.DataFrame({
    "2018_m":[40, 12, 10, 26, 36],
    "2019_m":[19, 8, 30, 21, 38],
    "2020_m":[10, 10, 42, 17, 37]
    }, index=["Dad", "Mam", "Bro", "Sis", "Me"]
)

plotdata2 = pd.DataFrame({
    "2018_y":[20, 22, 10, 34, 12],
    "2019_y":[12, 19, 27, 35, 14],
    "2020_y":[21, 31, 52, 20, 34]
    }, index=["Dad", "Mam", "Bro", "Sis", "Me"]
)

stacked_data = plotdata.apply(lambda x: x*100/sum(x), axis=1)
stacked_data2 = plotdata2.apply(lambda x: x*100/sum(x), axis=1)
stacked_data.plot(kind="bar", stacked=True)
stacked_data2.plot(kind="bar", stacked=True)
这是输出:

我想知道什么是最好的方式来结合他们,使爸爸,妈妈,兄弟等都有两个堆叠酒吧?我在Stack Overflow在线和其他地方遇到了许多其他分组堆叠条形码,但它们要求您迭代定义每个条形码的值,而理想情况下,我只需要引用上面代码中的数据帧名称“plotdata”和“plotdata2”


提前谢谢

对于两组,您可以通过
位置
并相应调整宽度:

fig, ax = plt.subplots()

stacked_data.plot(kind="bar", stacked=True, width=0.4, 
                  ax=ax, position=0)
stacked_data2.plot(kind="bar", stacked=True, width=0.4, 
                   ax=ax, position=1, hatch='//')

ax.set_xlim(right=len(stacked_data)-0.5)
输出:


对于两组,您可以通过
位置
并相应调整宽度:

fig, ax = plt.subplots()

stacked_data.plot(kind="bar", stacked=True, width=0.4, 
                  ax=ax, position=0)
stacked_data2.plot(kind="bar", stacked=True, width=0.4, 
                   ax=ax, position=1, hatch='//')

ax.set_xlim(right=len(stacked_data)-0.5)
输出: