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

如何在散点图中绘制同一X坐标下Y值的平均线?

解决同一X坐标下Y值均值的平均线绘制问题

你之前的代码错误在于使用了滚动窗口均值(rolling(window=window_size).mean()),这种方式是按数据行的顺序滑动计算连续n个值的平均,和你需求的“同一X坐标下所有数据点Y值的均值”逻辑完全不符,这就是结果不符合预期的核心原因。

正确实现方式

下面提供两种可行的实现方案:

方案1:手动分组计算均值(精准匹配每个X值)

适合离散型X特征,能精准计算每个唯一X值对应的Y均值:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(20,20))
for idx, col in enumerate(df.columns, 1):
    plt.subplot(df.shape[1]-4, 4, idx)
    # 绘制原始散点图
    sns.scatterplot(data=df, x=col, y='charges')
    
    # 按X值分组,计算对应Y的均值并排序
    avg_df = df.groupby(col)['charges'].mean().reset_index().sort_values(col)
    
    # 绘制蓝色均值线
    plt.plot(avg_df[col], avg_df['charges'], color='blue', label='均值线')
    plt.xlabel(col)
    plt.legend()

plt.tight_layout()
plt.show()

方案2:用Seaborn自动计算均值(适合连续型X特征)

如果X是连续型变量,Seaborn的lineplot可以自动分箱计算均值并绘制平滑线条:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(20,20))
for idx, col in enumerate(df.columns, 1):
    plt.subplot(df.shape[1]-4, 4, idx)
    # 绘制散点图
    sns.scatterplot(data=df, x=col, y='charges')
    # 自动计算并绘制均值线(ci=None关闭置信区间)
    sns.lineplot(data=df, x=col, y='charges', color='blue', estimator='mean', ci=None)
    plt.xlabel(col)

plt.tight_layout()
plt.show()

关键说明

  • 方案1通过groupby严格按X的每个唯一值分组,计算对应Y的均值,排序后绘制线条,保证每个X点的均值准确对应。
  • 方案2适合连续X特征,Seaborn会自动对X进行分箱处理,计算每个分箱内Y的均值,绘制出更平滑的趋势线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:05:21