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

为何运行回归直线绘制代码后仅显示散点图,未出现Regression line?

回归直线不显示的问题排查与解决

你的代码逻辑本身没问题,但回归直线看不到的核心原因是原始BMI数据是无序的——plt.plot()会按照数据的原始顺序依次连接回归线上的点,当BMI值忽大忽小时,线条会在散点间来回穿梭,视觉上被密集的散点覆盖,看起来像没显示(尤其你这组数据相关性高达0.9,散点本身就很贴近直线,线条混乱后更难分辨)。

给你两种快速解决的方案:

方案1:对BMI排序后绘制直线

先对BMI数据进行排序,再计算对应回归直线的y值,这样plot出来的线条是连续递增的:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

data=pd.read_csv("NHANES.csv")

correlation = data['BMI'].corr(data['Waist'])
print(f"Korrelationskoeffizient: {correlation}")

slope, intercept, r_value, p_value, std_err = stats.linregress(data['BMI'], data['Waist'])

# 对BMI排序,同时计算对应回归值
sorted_bmi = np.sort(data['BMI'])
sorted_reg_line = slope * sorted_bmi + intercept

plt.scatter(data['BMI'], data['Waist'], label='Streudiagramm')
# 使用排序后的BMI和回归值绘图
plt.plot(sorted_bmi, sorted_reg_line, color='red', label='Regressionsgerade')

plt.xlabel('BMI')
plt.ylabel('Waist')
plt.legend()
plt.show()

方案2:生成均匀分布的X值绘制直线(更通用)

直接生成覆盖BMI取值范围的均匀X点,计算对应的回归Y值,这样不管原始数据顺序如何,都能画出一条平滑的直线:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

data=pd.read_csv("NHANES.csv")

correlation = data['BMI'].corr(data['Waist'])
print(f"Korrelationskoeffizient: {correlation}")

slope, intercept, r_value, p_value, std_err = stats.linregress(data['BMI'], data['Waist'])

# 生成100个覆盖BMI最小值到最大值的均匀点
x = np.linspace(data['BMI'].min(), data['BMI'].max(), 100)
reg_line = slope * x + intercept

plt.scatter(data['BMI'], data['Waist'], label='Streudiagramm')
plt.plot(x, reg_line, color='red', label='Regressionsgerade')

plt.xlabel('BMI')
plt.ylabel('Waist')
plt.legend()
plt.show()

两种方案都能让红色的回归直线清晰显示出来,你可以根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:32:32