python - 带有扭曲的熊猫堆积条形图
问题描述
作为漂亮图表的新手,我希望我能得到人群的帮助:
我想创建一个带有一些规格的堆积条形图
- 该条
Totals
将标有其百分比混合列Type
(见下文) - 图中的索引,
Year
在Crncy
这种情况下,应该是水平的,最好不要重复(见下图) - 下图中的
(Total, Total)
行是有一个单独的(右)y轴(见下图)和一个标签,如上图1所示
一些模拟数据:
data={'Year':[2021, 2021, 2021, 2021, 2022, 2022, 2023, 2024, 2024, 2025, 2026, 2027, 2027, 2027],'Crncy':['GBP', 'SEK', 'USD', 'USD', 'SEK', 'SEK', 'SEK', 'EUR', 'EUR', 'EUR', 'USD', 'EUR', 'EUR', 'SEK'],'Type':['Fixed', 'Float', 'Fixed', 'Float', 'Fixed', 'Float', 'Float', 'Fixed', 'Float', 'Fixed', 'Float', 'Fixed', 'Float', 'Float'],'Amount':[100, 200, 300, 400, 500, 100, 150, 600, 800, 500.0, 200, 50, 50, 100]}
df = pd.DataFrame(data)
a=df.groupby(['Year','Type'])['Amount'].sum().reset_index()
b=df.groupby(['Type'])['Amount'].sum().reset_index()
a['Crncy']='Total'
b['Crncy']='Total'
b['Year']='Total'
df=pd.concat([df,a,b]).reset_index(drop=True)
到目前为止,我已经设法完成以下步骤,允许我创建按上述规范分组的百分比
a=df.groupby(['Year','Crncy','Type'])['Amount'].sum()
b=a.div(a.sum(level=[0,1]))*100
>>
Year Crncy Type
2021 GBP Fixed 100.000000
SEK Float 100.000000
Total Fixed 40.000000
Float 60.000000
USD Fixed 42.857143
Float 57.142857
2022 SEK Fixed 83.333333
Float 16.666667
Total Fixed 83.333333
Float 16.666667
2023 SEK Float 100.000000
Total Float 100.000000
2024 EUR Fixed 42.857143
Float 57.142857
Total Fixed 42.857143
Float 57.142857
2025 EUR Fixed 100.000000
Total Fixed 100.000000
2026 Total Float 100.000000
USD Float 100.000000
2027 EUR Fixed 50.000000
Float 50.000000
SEK Float 100.000000
Total Fixed 25.000000
Float 75.000000
Total Total Fixed 50.617284
Float 49.382716
现在,我的解决方案是旋转原始 DataFrame df
,然后绘制为堆叠条形图:
df.reset_index().sort_values(by=['Year','Crncy','Type']).pivot_table(index=['Year','Crncy'],columns='Type',values='Amount').fillna(0.0).plot.bar(stacked=True)
>>
但我所追求的,应该看起来更像这样:
很感谢任何形式的帮助。
也许有一种更简单的方法可以解决这个问题,或者你们有一些更直观的数据呈现方式——我愿意接受建议,谢谢。
/N
解决方案
推荐阅读
- javascript - Java put/putShort 与 JS
- python - 无效参数:无法终止已退出进程,使用 geckodriver 在 Python 中运行 Selenium
- android - 如何在用于开发的安卓手机上退出恢复模式循环?
- vue.js - 如何从“props”数组中拼接一个对象并将其分配给预定义的“data”属性,使其可访问和反应?
- android - 将 LocalDao getData() 与 ViewModel 一起使用时接收 null
- html - 将一个组件垂直居中,并将 appbar 置于屏幕材质 UI 的顶部
- r - 分数向量(来自 MASS)如何进行错误检查?
- kernel - 用户程序的内核模式
- python - 如何压缩大文件?
- python - Python多线程随机生成