You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中绘制分组数据均值?求修正代码均值位置错误

问题分析与修正

你的代码存在两个关键错误,导致均值的数值和位置都不符合预期:

1. 均值计算未按Target分组

你当前计算的是整个Condition的全局均值,而非每个Target下对应Condition的分组均值,所以每个Target的同Condition均值完全一致,不符合分组展示的需求。

2. 手动设置的x轴偏移与stripplot的dodge规则不匹配

你手动定义的偏移量(±0.325、±0.075)是固定值,但seaborn的dodge=True会根据分组数量自动调整偏移,手动值和实际分组位置不对应,导致均值线条错位。


修正后的代码
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = pd.read_csv("PB1_MG_5.8.csv")

# 绘制散点图,保留ax对象用于后续操作
ax = sns.stripplot(data=data, x='Target', y='Value', edgecolor='black', 
                   jitter=True, dodge=True, linewidth=1, hue="Condition", 
                   hue_order=['NoNS2','NS2'], alpha=0.3)

sns.despine()
ax.legend(['-NS2','+NS2'], bbox_to_anchor=(1.05, 0.7), loc=2, borderaxespad=0., frameon=False, title='PB1')

plt.ylabel('log$2$(1600/length)')
plt.xticks(rotation=45, ha='right')
ax.set_yscale('log', base=2)
ax.set_ylim(1,8)

# 映射Target到对应的x轴位置(分类变量对应0、1、2)
target_pos_map = {t: idx for idx, t in enumerate(['200nt', '400nt', '800nt'])}
# 使用seaborn dodge默认偏移量(两组hue时,每组偏移0.2)
dodge_offset = 0.2

for target, x_pos in target_pos_map.items():
    # 计算当前Target下NoNS2的分组均值
    mean_nons2 = data[(data['Target'] == target) & (data['Condition'] == 'NoNS2')]['Value'].mean()
    # 绘制NoNS2的均值线,对齐散点分组位置
    plt.plot([x_pos - dodge_offset, x_pos], [mean_nons2, mean_nons2], lw=4, c='k', zorder=9)
    
    # 计算当前Target下NS2的分组均值
    mean_ns2 = data[(data['Target'] == target) & (data['Condition'] == 'NS2')]['Value'].mean()
    # 绘制NS2的均值线,对齐散点分组位置
    plt.plot([x_pos, x_pos + dodge_offset], [mean_ns2, mean_ns2], lw=4, c='k', zorder=9)

修正说明

  • 均值计算:通过(data['Target'] == target) & (data['Condition'] == 'xxx')同时筛选Target和Condition,得到每个分组的正确均值。
  • 位置对齐:使用seaborn默认的dodge偏移量,和stripplot的分组位置完全匹配,避免手动偏移的误差。如果需要更精准的偏移值,可以通过ax.collections提取散点的实际位置数据进行计算。

内容的提问来源于stack exchange,提问作者Sharmada Swaminath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:30:10