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

如何在ML模型预测-真实值Parity图上添加共享轴的KDE密度图?

实现带KDE密度图的Parity图(共享坐标轴)

要在Parity图顶部和右侧添加KDE密度图并共享坐标轴,你可以用matplotlib.gridspec.GridSpec精确控制子图布局,让顶部KDE共享主图的X轴,右侧KDE共享主图的Y轴。以下是修正后的完整代码:

import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.gridspec import GridSpec

# 假设results已包含真实值和预测值
real = results['real']
pred = results['pred']

# 创建画布和网格布局
fig = plt.figure(figsize=(10, 8))
# 定义2行2列网格,控制子图大小比例和间距
gs = GridSpec(2, 2, width_ratios=[4, 1], height_ratios=[1, 4], wspace=0.05, hspace=0.05)

# 主图:Parity散点图
ax_main = fig.add_subplot(gs[1, 0])
ax_main.scatter(real, pred, alpha=0.6, s=20)
# 添加对角线参考线
ax_main.axline([real.min(), real.min()], [real.max(), real.max()], linestyle='--', color='red', linewidth=2)
ax_main.set_xlabel('真实值', fontsize=12)
ax_main.set_ylabel('预测值', fontsize=12)
# 扩展坐标轴范围,避免点贴边
ax_main.set_xlim(real.min()*0.9, real.max()*1.1)
ax_main.set_ylim(pred.min()*0.9, pred.max()*1.1)

# 顶部KDE:真实值的分布,共享主图X轴
ax_top = fig.add_subplot(gs[0, 0], sharex=ax_main)
sns.kdeplot(x=real, ax=ax_top, color='blue')
ax_top.set_ylabel('密度', fontsize=10)
# 隐藏冗余边框和X轴刻度
ax_top.spines['top'].set_visible(False)
ax_top.spines['right'].set_visible(False)
plt.setp(ax_top.get_xticklabels(), visible=False)

# 右侧KDE:预测值的分布,共享主图Y轴
ax_right = fig.add_subplot(gs[1, 1], sharey=ax_main)
sns.kdeplot(y=pred, ax=ax_right, color='green')
ax_right.set_xlabel('密度', fontsize=10)
# 隐藏冗余边框和Y轴刻度
ax_right.spines['top'].set_visible(False)
ax_right.spines['right'].set_visible(False)
plt.setp(ax_right.get_yticklabels(), visible=False)

plt.tight_layout()
plt.show()

关键细节说明:

  • GridSpec通过比例参数控制子图大小,紧凑的间距让KDE图和主图无缝对齐
  • sharex/sharey参数保证KDE图与主图坐标轴范围完全一致
  • 隐藏冗余的边框和刻度,让整体视觉更简洁,符合论文可视化的专业风格
  • 散点的alpha参数避免点重叠导致的视觉混乱,提升可读性

内容的提问来源于stack exchange,提问作者James Arten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:50:01