如何在散点图中绘制同一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
相关产品推荐
相关产品推荐

