为何运行回归直线绘制代码后仅显示散点图,未出现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
相关产品推荐
相关产品推荐

