如何对比DataFrame两列并可视化?大样本下展示真实与预估距离差异
真实距离与预估距离的可视化对比方案
针对你2346行的数据集,以下几种可视化方式能清晰展示每行数据的差异,结合不同场景选择即可:
1. 交互式分组柱状图(适合逐个查看样本)
普通静态柱状图面对大数据量会出现柱子重叠、刻度拥挤的问题,用交互式工具(如Plotly)可支持缩放、hover查看单样本细节,完美解决这个问题:
import plotly.express as px import pandas as pd # 替换为你的df_actual df = pd.DataFrame( {'id': [53, 54, 55, 56, 57], 'true_distance': [880.32,1278.87,838.44,6811.63,13339.92], 'estimated_distance': [330.23,1099.73,534.86,6692.78,6180.8]} ) # 转换为长格式适配分组绘图 df_melt = df.melt(id_vars='id', var_name='距离类型', value_name='距离值') # 生成交互式柱状图 fig = px.bar(df_melt, x='id', y='距离值', color='距离类型', barmode='group', title='真实距离vs预估距离对比') fig.update_layout(xaxis_tickangle=-45) fig.show()
如果偏好静态图,可对数据做抽样/过滤(比如只展示差值Top50的样本),用Matplotlib+Seaborn实现:
import matplotlib.pyplot as plt import seaborn as sns df['diff'] = abs(df['true_distance'] - df['estimated_distance']) # 取差异最大的50个样本展示 df_top_diff = df.sort_values('diff', ascending=False).head(50) df_melt = df_top_diff.melt(id_vars='id', var_name='距离类型', value_name='距离值') plt.figure(figsize=(14, 6)) sns.barplot(x='id', y='距离值', hue='距离类型', data=df_melt) plt.title('差异Top50样本的真实与预估距离对比') plt.xlabel('样本ID') plt.ylabel('距离') plt.xticks(rotation=45, ha='right') plt.tight_layout() plt.show()
2. 差值折线图(快速定位差异异常点)
直接计算每行的距离差值,用折线图展示差异变化,能一眼找到差值波动大的样本:
import matplotlib.pyplot as plt df['distance_diff'] = df['true_distance'] - df['estimated_distance'] plt.figure(figsize=(16, 6)) plt.plot(df['id'], df['distance_diff'], marker='.', markersize=1, linestyle='-', linewidth=0.3) # 绘制0差值基准线 plt.axhline(y=0, color='red', linestyle='--', label='无差异基准线') plt.title('真实与预估距离的差值变化') plt.xlabel('样本ID') plt.ylabel('真实距离 - 预估距离') plt.legend() plt.tight_layout() plt.show()
3. 散点图(查看整体趋势与异常值)
以真实距离为X轴、预估距离为Y轴绘制散点图,对角线代表完全匹配的理想情况,偏离对角线的点就是差异较大的样本,适合快速把握整体拟合效果:
import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(8, 8)) sns.scatterplot(x='true_distance', y='estimated_distance', data=df, alpha=0.5) # 绘制完美匹配对角线 plt.plot([df['true_distance'].min(), df['true_distance'].max()], [df['true_distance'].min(), df['true_distance'].max()], color='red', linestyle='--') plt.title('真实距离vs预估距离拟合散点图') plt.xlabel('真实距离') plt.ylabel('预估距离') plt.tight_layout() plt.show()
选择建议
- 需逐个查看样本差异:选交互式分组柱状图
- 需快速定位差异异常点:选差值折线图
- 需把握整体拟合趋势:选散点图
内容的提问来源于stack exchange,提问作者planar
相关产品推荐
相关产品推荐

