如何在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
相关产品推荐
相关产品推荐

