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

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

这个问题已经有答案了

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

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

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

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

输出量:

使用的输入:

Class Grade  Count
0    One     A      5
1            B      6
2            C      5
3    Two     A      4
4            B      3
5            C      4
6  Three     A      7
7            B      3
8            C      2
yzuktlbb

yzuktlbb2#

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

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

数据类型:

print (df)
             Count
Class Grade       
One   A          5
      B          6
      C          5
Two   A          4
      B          3
      C          4
Three A          7
      B          3
      C          2
print (df.index)
MultiIndex([(  'One', 'A'),
            (  'One', 'B'),
            (  'One', 'C'),
            (  'Two', 'A'),
            (  'Two', 'B'),
            (  'Two', 'C'),
            ('Three', 'A'),
            ('Three', 'B'),
            ('Three', 'C')],
           names=['Class', 'Grade'])

相关问题