【问题标题】:How to create a stacked barplot in python [duplicate]如何在python中创建堆叠的条形图[重复]
【发布时间】:2025-12-21 03:05:07
【问题描述】:

我有一个熊猫数据框如下

        batsman      non_striker  partnershipRuns
0      SK Raina       A Flintoff               23
1      SK Raina         DR Smith               90
2      SK Raina     F du Plessis               36
3      SK Raina        JA Morkel               14
10     MS Dhoni    CK Kapugedera               18
11     MS Dhoni         DJ Bravo               51
12     MS Dhoni     F du Plessis               27
13     MS Dhoni        JA Morkel               12
14     MS Dhoni         JDP Oram                6

我发现用 pandas 或 seaborn 创建堆积条形图真的很困难。任何帮助将不胜感激

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    使用 Pandas 创建绘图非常简单。一旦你有了一个数据框,只需像这个例子一样调用plot(我使用了你的示例数据集)。

    import pandas as pd
    import matplotlib.pyplot as plt
    
    #create the dataframe from your data
    batsman = ['SK Raina','SK Raina','SK Raina','SK Raina','MS Dhoni','MS Dhoni', 'MS Dhoni','MS Dhoni','MS Dhoni']
    non_striker = [ 'A Flintoff', 'DR Smith' ,'du Plessis','JA Morkel',  'Kapugedera', 'DJ Bravo', 'du Plessis', 'JA Morkel', 'JDP Oram']
    partnershipRuns = [23,90,36,14,18,51,27,12, 6]
    
    
    df = pd.DataFrame({'batsman': batsman, 'non_striker': non_striker, 'partnershipRuns': partnershipRuns})
    
    #make your data numerical
    df = df.pivot(columns='non_striker',index='batsman').fillna(0)
    #plot it
    df.plot(kind='bar',stacked=True,legend=False)
    plt.show()
    

    这会产生如下内容:

    如果你的数据不是数字,你必须先转换它。

    【讨论】:

      【解决方案2】:

      我可以通过两种方式做到这一点

      1)

      df1=df.pivot(columns='non_striker',index='batsman').fillna(0)
      df1.plot(kind='bar',stacked=True,legend=False)
      

      2)

      df1=df.groupby(['batsman','non_striker']).sum().unstack().fillna(0)
      df1.plot(kind='bar',stacked=True,legend=False)
      

      两者都有效。我们需要在列之间创建一个表,然后在用 0s 填充 NA 后进行绘图

      【讨论】: