matplotlib 如何从具有两个索引的表中生成堆叠条形图?

8ehkhllq  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(99)

这个问题已经有答案了

Plotting Pandas Multiindex Bar Chart(1个答案)
上个月关门了。
我在Python中有这样一个 Dataframe :
| 类|级|计数|
| --|--|--|
| 一|一| 5 |
| | 6 | 6 |
| | 5 | 5 |
| 两|一| 4 |
| | 3 | 3 |
| | 4 | 4 |
| 三|一| 7 |
| | 3 | 3 |
| | 2 | 2 |
我想制作一个堆叠条形图,y轴为Count,X轴为Class(One,Two,Three)。每个条形图堆叠A,B,C Counts,以给予每个类的ABC总数。类似于以下内容:

如何使用matplotlib实现这一点?

qgzx9mmu

qgzx9mmu1#

假设有3列,你可以ffill缺失值,然后pivotplot.bar

  1. (df.replace('', np.nan).ffill()
  2. .pivot(index='Class', columns='Grade', values='Count')
  3. .plot.bar(stacked=True)
  4. )

如果您有一个包含单列的MultiIndex,则可以是unstack或:

  1. (df.reset_index()
  2. .pivot(index='Class', columns='Grade', values='Count')
  3. .plot.bar(stacked=True)
  4. )

输出量:

使用的输入:

  1. Class Grade Count
  2. 0 One A 5
  3. 1 B 6
  4. 2 C 5
  5. 3 Two A 4
  6. 4 B 3
  7. 5 C 4
  8. 6 Three A 7
  9. 7 B 3
  10. 8 C 2
展开查看全部
yzuktlbb

yzuktlbb2#

因为有Multiindex,所以使用Series.unstack来整形DataFrame.plot.bar

  1. df['Count'].unstack().plot.bar(stacked=True)

数据类型:

  1. print (df)
  2. Count
  3. Class Grade
  4. One A 5
  5. B 6
  6. C 5
  7. Two A 4
  8. B 3
  9. C 4
  10. Three A 7
  11. B 3
  12. C 2
  13. print (df.index)
  14. MultiIndex([( 'One', 'A'),
  15. ( 'One', 'B'),
  16. ( 'One', 'C'),
  17. ( 'Two', 'A'),
  18. ( 'Two', 'B'),
  19. ( 'Two', 'C'),
  20. ('Three', 'A'),
  21. ('Three', 'B'),
  22. ('Three', 'C')],
  23. names=['Class', 'Grade'])
展开查看全部

相关问题