我有一个这样的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()
的情节
看起来像这样:
我该怎么做?
答案 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")