【问题标题】:How to create a grouped barplot from three columns in pandas [duplicate]如何从熊猫中的三列创建分组条形图[重复]
【发布时间】:2020-04-15 03:17:35
【问题描述】:

我有一个这样的数据框:

  Type Week Value
0  A    1    11
1  A    2     1
2  A    3     7
3  B    1    13
4  B    2    20
5  B    3    30

我想制作一个类似df.plot.bar() 的情节 所以它看起来像这样:

我该怎么做?

【问题讨论】:

  • df.pivot('Type','Week','Value').plot.bar()

标签: python pandas dataframe matplotlib


【解决方案1】:

我用 Seaborn 来做那个情节:

import pandas as pd
import seaborn as sns

data=[['A',1,11],['A',2,1],['A',3,7],['B',1,13],['B',2,20],['B',3,30]]
df=pd.DataFrame(data,columns=['Type','Week','Value'])

sns.barplot(x='Type', y='Value', data=df, hue='Week');

使用 Seaborn,您可以正确选择要绘制的 X 和 Y,并使用参数 hue 显示每周的值。 Seaborn 是基于 matplotlib 的,所以你在 plt 中使用的函数也适用于 Seaborn(如plt.legend()plt.xlabel() 等)。

【讨论】:

    【解决方案2】:

    要详细说明@QuangHoang 的评论,流程分为两个步骤。

    首先,透视数据。

    pivoted = df.pivot('Type', 'Week', 'Value') 
    pivoted
    # Week   1   2   3
    # Type            
    # A     11   1   7
    # B     13  20  30
    

    DataFrame.plot.bar 的文档中概述了其原因(重点是我的)。

    x :标签或位置,可选。允许绘制一列与 其他。 如果不指定,则使用DataFrame的索引。

    y :标签或位置,可选。允许绘制一列与 其他。 如果未指定,则使用所有数字列。

    如果两个参数都没有指定,它使用xType 索引和每个数字列(现在每周一个)来获取许多条的y 值。这正是你想要的。

    pivoted.plot.bar()
    

    【讨论】:

      【解决方案3】:

      鉴于pandas 解决方案是@Quang Hoang 提供的解决方案,如果您有整洁的数据集,您可以按照@Leonardo Araújo 或plotly 的建议使用seaborn(返回一个不错的交互式绘图) 如下

      import pandas as pd
      import plotly.express as px
      
      data = [['A',1,11],
              ['A',2,1],
              ['A',3,7],
              ['B',1,13],
              ['B',2,20],
              ['B',3,30]]
      df = pd.DataFrame(data, columns=['Type','Week','Value'])
      
      # you need this as you want week to be category and not continuous
      df["Week"] = df["Week"].astype(str)
      px.bar(df, x="Type", y="Value", color="Week", barmode="group")
      

      【讨论】:

        猜你喜欢
        • 2022-08-03
        • 2015-06-28
        • 1970-01-01
        • 2020-12-19
        • 2017-02-07
        • 2019-01-23
        • 2019-04-30
        • 1970-01-01
        相关资源
        最近更新 更多