繁体   English   中英

在 Python (Seaborn) 中绘制包括标准差在内的多列的平均值

[英]Plotting the mean of multiple columns including standard deviation in Python (Seaborn)

我有一个包含 8 列和几行的数据集。 这些列包含在 2 个不同条件下对不同变量(总共 6 个)的测量值,每列包含 4 个包含特定条件重复测量值的列。

使用 Searborn,我想生成一个条形图,显示每 4 列的平均值和标准偏差,按索引键(即测量变量)分组。 数据帧结构如下:

np.random.seed(10)
df = pd.DataFrame({
    'S1_1':np.random.randn(6),
    'S1_2':np.random.randn(6),
    'S1_3':np.random.randn(6),
    'S1_4':np.random.randn(6),
    'S2_1':np.random.randn(6),
    'S2_2':np.random.randn(6),
    'S2_3':np.random.randn(6),
    'S2_4':np.random.randn(6),
    },index= ['var1','var2','var3','var4','var5','var6'])

我如何传递给我只想要 2 个小节的 seaborn,前 4 列 1 个,第二个 1 个。 每个条形显示跨 4 列的平均值(和标准偏差或其他一些分散度量)。

我正在考虑使用多索引,添加第二个列级别将列分组为 2 个条件,

df.columns = pd.MultiIndex.from_arrays([['Condition 1'] * 4 + ['Condition 2'] * 4,df.columns])

但我不知道我应该传递给 Seaborn 什么来生成我想要的情节。

如果有人能指出我正确的方向,那将是一个很大的帮助!

  • 使用列表理解将列分成 4 组
  • 创建与副区的图,并且每个组压缩到axaxes
  • 使用每个groupdf选择data并使用.T转置数据。
  • 使用sns.barplot默认estimator是平均值,所以条的长度是平均值,并设置ci='sd'所以置信区间是标准偏差。
import seaborn as sns

# using the first comma separated data that was posted, create groups of 4
l = df.columns
n = 4
groups = [l[i:i+n] for i in range(0, len(l), n)]
num_gps = len(groups)

# plot
fig, axes = plt.subplots(num_gps, 1, figsize=(12, 6*num_gps))

for ax, group in zip(axes, groups):
    data = df[group].T
    sns.barplot(data=data, ci='sd', ax=ax)
    ax.set_title(f'{group.to_list()}')

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM