如何使用Seaborn绘制多列分组的均值及标准差柱状图
Seaborn绘制分组条件均值柱状图实现方案
核心思路
你新增列多级索引的操作是完全正确的,后续只需要把宽格式的原始数据集转换为Seaborn适配的长格式数据集,直接调用柱状图接口即可自动计算分组均值、生成标准差误差棒,无需手动提前统计数值。
完整实现代码
1. 导入依赖库
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt
2. 初始化测试数据集(和你提供的示例一致)
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']) # 为列添加多级索引区分两组条件,和你的操作一致 df.columns = pd.MultiIndex.from_arrays([['Condition 1'] * 4 + ['Condition 2'] * 4, df.columns])
3. 转换为长格式数据集
# 把列层级转换为行维度,重置索引生成结构化长表 df_long = df.stack(level=[0,1]).reset_index() # 重命名列方便后续调用 df_long.columns = ['被测变量', '实验条件', '重复测量编号', '测量值']
4. 绘制目标柱状图
plt.figure(figsize=(6,4)) sns.barplot( data=df_long, x='实验条件', # 按实验条件分组,最终生成2根柱子 y='测量值', errorbar='sd', # 误差棒显示标准差,需置信区间可改为'ci' palette='coolwarm' ) # 按需调整图表标签 plt.xlabel('实验条件') plt.ylabel('所有测量值均值') plt.title('不同条件下测量值均值与标准差') plt.show()
可选扩展说明
如果需要按被测变量分组、每个变量下显示2根不同条件的柱子,仅需把sns.barplot的x参数改为被测变量,新增hue='实验条件'参数即可。
内容的提问来源于stack exchange,提问作者JohanvH
相关产品推荐
相关产品推荐

