matplotlib绘制LinearRegression时绘图报错、多图合并及数值缩放问题求解
问题解决方案
1. 线性回归回归线显示异常、删除散点代码报错的问题
原因
你的x_test是包含多特征的二维数组(删除指定列后剩余特征数>1),直接调用plt.plot(x_test, y_pred)时,matplotlib会把x_test的每一列当作独立的X序列和一维的y_pred匹配,删除散点代码后该尺寸不匹配问题会直接触发报错;同时因为多特征输入,回归线会出现多条杂乱线段的异常显示。
修复代码
只保留你要绘制的第一个特征(人均GDP)的对应维度,排序后再绘制回归线即可:
# 提取测试集中的人均GDP特征(第一列) x_test_gdp = x_test[:, 0] # 按GDP值排序,避免回归线混乱 sort_idx = np.argsort(x_test_gdp) x_sorted = x_test_gdp[sort_idx] y_pred_sorted = y_pred[sort_idx] plt.scatter(x_test_gdp, y_test, label='实际值') plt.plot(x_sorted, y_pred_sorted, color='green', linewidth=1, label='回归线') plt.legend() plt.show()
2. Population列数值过大导致其他列显示异常的问题
解决方案
绘图时对人口列的坐标轴使用对数刻度即可,不需要修改原始数据,就能把十亿级别的数值压缩到合理的显示范围:
如果是单独绘制人口散点图,在绘图后添加一行plt.xscale('log')即可;如果是合并子图的场景,直接对子图的X轴设置对数刻度。
3. 三张散点图合并到同一张画布的问题
解决方案
提前创建matplotlib子图对象,把每个散点图指定绘制到对应子图即可,示例代码如下:
# 创建1行3列的画布,可根据需要调整figsize调整画布大小 fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3, figsize=(18, 5)) # 分别指定ax参数绘制到对应子图 dataset.plot(x="GDP ($ per capita)", y="Infant mortality ", style="o", ax=ax1, title="人均GDP与婴儿死亡率关系") dataset.plot(x="Literacy (%)", y="Infant mortality ", style="o", ax=ax2, title="识字率与婴儿死亡率关系") dataset.plot(x="Population", y="Infant mortality ", style="o", ax=ax3, title="人口与婴儿死亡率关系") # 给人口子图设置对数X轴,解决数值过大显示问题 ax3.set_xscale("log") plt.tight_layout() plt.show()
你可以把原代码中单独绘制三个散点图的代码替换为以上代码即可。
内容的提问来源于stack exchange,提问作者Alexander Vasiliev
相关产品推荐
相关产品推荐

