使用 seaborn 对数据进行分组后的条形图
Posted
技术标签:
【中文标题】使用 seaborn 对数据进行分组后的条形图【英文标题】:Barplot after grouping data using seaborn 【发布时间】:2018-08-09 02:13:36 【问题描述】:我正在尝试使用seaborn.barplot
在分组后绘制数据。我的第一种方法是使用以下方法生成一个新的数据框:
g_data = g_frame.groupby(["STG","GRP"])["HRE"].mean()
g_data
这是输出:
STG GRP
S1 Control 0.561871
OSA 0.589858
S2 Control 0.595950
OSA 0.629775
S3 Control 0.629906
OSA 0.674118
S4 Control 0.578875
OSA 0.568370
S5 Control 0.557712
OSA 0.569524
Name: HRE, dtype: float64
接下来,我定义了一个名为plot_v1(data)
的绘图函数,如下所示:
def plot_v2(data):
# Create the bar plot
ax = sns.barplot(
x="STG", y="HRE", hue="GRP",
order=["S1", "S2", "S3", "S4", "S5"],
hue_order=["Control", "OSA"],
data=data)
# Return the figure object and axis
return plt.gcf(), ax
plot_v2(g_data);
这会引发一个错误:
149 if isinstance(input, string_types):
150 err = "Could not interpret input ''".format(input)
--> 151 raise ValueError(err)
152
153 # Figure out the plotting orientation
ValueError: Could not interpret input 'STG'
我不确定我做错了什么。当我检查索引值时,它看起来很好。
g_data.index
MultiIndex(levels=[['S1', 'S2', 'S3', 'S4', 'S5'], ['Control', 'OSA']],
labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]],
names=['STG', 'GRP'])
【问题讨论】:
试试g_data.reset_index()
或g_frame.groupby(as_index=False...)
太棒了!谢谢,这行得通。你知道我为什么需要做这一步吗?
【参考方案1】:
不确定您的最终期望是什么,但这是我对 barplot 的方法:
df.groupby(["STG","GRP"]).mean().unstack().plot.bar()
【讨论】:
这也有效!甚至 Brad Solomon 也提到了替代解决方案。谢谢:)以上是关于使用 seaborn 对数据进行分组后的条形图的主要内容,如果未能解决你的问题,请参考以下文章
Python使用seaborn可视化分组条形图(side by side)并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)
Pandas Dataframe 到 Seaborn 分组条形图
更改刻度名称后,如何修复 seaborn 条形图中缺少的条形?
seaborn可视化绘制双变量分组条形图(Annotating Grouped Barplot: Side-by-side)添加数值标签进行标记