Python新手求教:如何在X轴添加实际价格并绘制实价vs预测价图
解决实际价格vs预测价格的对比图绘制问题
嘿,别慌!作为Python新手,能想到用可视化来验证预测结果已经很棒啦~你现在的代码是用Id做X轴画价格走势,而你需要的是实际价格做X轴、预测价格做Y轴的散点对比图,我来一步步教你改:
核心思路
我们需要把实际价格和对应的预测价格一一对应起来,用散点图展示它们的关系,再加上一条y=x的参考线——如果预测完全准确,所有点都会落在这条线上,偏离越远说明预测误差越大。
具体步骤&代码
第一步:确保数据对应(关键!)
首先要保证你的实际价格数据(df_tr)和预测价格数据(df_pred)是按相同顺序排列的(比如都按Id排序),或者通过合并数据框来对齐:
import pandas as pd # 合并实际和预测数据,用Id做匹配,给列名加后缀区分 merged_df = pd.merge(df_tr[['Id', 'SalePrice']], df_pred[['Id', 'SalePrice']], on='Id', suffixes=('_actual', '_predicted'))
第二步:绘制对比散点图
替换你原来的绘图代码,用plt.scatter来画:
import matplotlib.pyplot as plt # 绘制实际价格(X轴) vs 预测价格(Y轴)的散点图 plt.scatter(merged_df['SalePrice_actual'], merged_df['SalePrice_predicted'], color='blue', alpha=0.6) # alpha设0.6让重叠点更清晰 # 添加y=x参考线,方便直观对比 plt.plot([merged_df['SalePrice_actual'].min(), merged_df['SalePrice_actual'].max()], [merged_df['SalePrice_actual'].min(), merged_df['SalePrice_actual'].max()], color='red', linestyle='--') # 设置图表细节 plt.title('Predicted vs Actual Sale Prices') plt.xlabel('Actual Sale Price') plt.ylabel('Predicted Sale Price') # 显示图形 plt.show()
简化版(如果数据已经对齐)
如果你确定df_tr和df_pred的行顺序完全对应(比如都按Id排好序了),也可以直接跳过合并,直接用两列数据绘图:
plt.scatter(df_tr['SalePrice'], df_pred['SalePrice'], color='blue', alpha=0.6) plt.plot([df_tr['SalePrice'].min(), df_tr['SalePrice'].max()], [df_tr['SalePrice'].min(), df_tr['SalePrice'].max()], color='red', linestyle='--') plt.title('Predicted vs Actual Sale Prices') plt.xlabel('Actual Sale Price') plt.ylabel('Predicted Sale Price') plt.show()
小提示
- 散点图比折线图更适合展示两个变量的对应关系,折线图在这里会显得混乱哦~
y=x参考线是关键,能快速帮你判断整体预测的偏差方向。
内容的提问来源于stack exchange,提问作者Lemair
相关产品推荐
相关产品推荐

