如何从熊猫的三列创建分组条形图

时间:2020-04-14 18:19:22

标签: python pandas dataframe matplotlib

我有一个这样的DataFrame:

  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()的情节 看起来像这样:

enter image description here

我该怎么做?

3 个答案:

答案 0 :(得分: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()等)。

答案 1 :(得分:0)

要详细说明@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:标签或位置,可选。允许绘制一列与 另一个。 如果未指定,则使用所有数字列。

如果未指定任何参数,则它将Type的索引x和每个数值列(现在是每周一)使用,以获取许多柱的y值。那正是您想要的。

pivoted.plot.bar()

答案 2 :(得分:0)

鉴于pandas解决方案是@Quang Hoang提供的解决方案,如果您的数据集比较整洁,则可以按照@LeonardoAraújo或seaborn的建议使用plotly(会返回一个漂亮的交互式图),如下所示:

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")

enter image description here