如何使堆叠的条形图底部有最大的块?python

如何使堆叠的条形图底部有最大的块?python,python,matplotlib,stacked-chart,Python,Matplotlib,Stacked Chart,我试图让我的堆叠条形图与底部最大的一块订购,但我不知道如何订购它 样本数据集 dataset = {'Year': [2019,2019,2020,2020,2017,2017,2017,2017,2017,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2020, 2020,2020,2020,2020], 'Quantity': [100,50,25,30,40,50,200,60

我试图让我的堆叠条形图与底部最大的一块订购,但我不知道如何订购它

样本数据集

dataset = {'Year': [2019,2019,2020,2020,2017,2017,2017,2017,2017,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2020,
                   2020,2020,2020,2020],
           'Quantity': [100,50,25,30,40,50,200,600,20,40,100,20,50,400,250,300,125,75,90,10,225,550,450,55],
           'Regions': ['Europe','Asia','Africa','Africa','Other','Asia','Africa','Other','America','America','Europe','Europe',
                      'Other','Europe','Asia','Africa','Asia','Europe','Other','Africa','Europe','Asia','Africa','Europe']}
df = pd.DataFrame(data=dataset)
以下是我创建图表的代码:

df_pt = df.pivot_table(index='Year', columns='Regions', values='Quantity')

df_pt.plot.bar(stacked=True, figsize=(10, 6))
如果您运行代码,您将看到最大的部分不在底部

输出图形:

你在这里:

from plotnine import ggplot, aes, geom_bar
import pandas as pd

dataset = {'Year': [2019,2019,2020,2020,2017,2017,2017,2017,2017,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2020,
                   2020,2020,2020,2020],
           'Quantity': [100,50,25,30,40,50,200,600,20,40,100,20,50,400,250,300,125,75,90,10,225,550,450,55],
           'Regions': ['Europe','Asia','Africa','Africa','Other','Asia','Africa','Other','America','America','Europe','Europe',
                      'Other','Europe','Asia','Africa','Asia','Europe','Other','Africa','Europe','Asia','Africa','Europe']}
df = pd.DataFrame(data=dataset)
df = df.groupby(['Year', 'Regions']).sum().reset_index()

p = ggplot(df) + aes(x='Year', y='Quantity', group='factor(Quantity)', fill='Regions') + geom_bar(stat='identity', alpha=0.8, show_legend=True)
print(p)

根据您的数据,我假设每个条都应该单独排序?“这是对的吗?”T先生我编辑了我的问题。有趣的是,这比我想象的仅仅使用matplotlib和pandas plot要困难得多。这可能值得一个功能增强请求,比如分段顺序。实际上,这个解决方案并不能真正解决我的问题。您的代码以不同的方式绘制每个数据点,最大数量在底部,最小数量在顶部。我希望将每个区域组合在一起,然后用底部最大的矩形进行排序。您能澄清一下“每个数据点都有区别”的含义吗?该图是条形图,因此数据是聚合的,而不是不同的。上面的plotnine解决方案生成的绘图与您文章中的第一个类似,但根据要求,底部每年都有一个最大的矩形(请记住,我修改了您的一个数据集值)。是的,它会对矩形进行排序。但是,当我在样本数据上运行它时,我得到了“欧洲”的几个矩形或“亚洲”(同一年)的几个矩形,而我只希望每年每个地区得到一个。(我在我的问题中添加了带有代码的图表供您查看,稍后将删除)即使是年份看起来很奇怪,我也会看到问题的根源。我已经更新了数据集、代码和绘图。这应该能解决问题,不客气。一个建议:当您有多行用于相同的列组合时(在本例中为[Year,Region]),您应该添加一个额外的列来解释这些不同值的原因(例如,同一年的不同月份?同一地区的不同国家?),或者至少作为注释提供解释,因为否则这些行可能会显示为重复或错误。