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

Matplotlib在共享Y轴双子图中绘制对角线的技术实现问询

完整实现代码 + 关键细节解释

没问题,我把你需要的可视化效果整理成了可直接运行的代码,还标注了每个关键步骤的作用:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 生成示例散点数据(你可以替换成自己的真实数据)
np.random.seed(42)  # 固定随机种子,结果可复现
x1 = np.random.randn(100)*2 + 10
y1 = x1 + np.random.randn(100)*1.5  # 带噪声的线性数据
x2 = np.random.randn(100)*3 + 10
y2 = x2*0.8 + np.random.randn(100)*2

# 创建1行2列、共享Y轴的子图
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, sharey=True, figsize=(12, 6))

# 在ax1绘制红色宽对角线
# 先获取数据的极值,确保对角线覆盖整个绘图区域
x_min, x_max = min(x1), max(x1)
y_min, y_max = min(y1), max(y1)
ax1.plot([x_min, x_max], [y_min, y_max], color='red', linewidth=3, label='Reference Diagonal')

# 用Seaborn绘制无拟合线的散点图
sns.regplot(x=x1, y=y1, ax=ax1, fit_reg=False, scatter_kws={'alpha': 0.6, 'color': 'steelblue'})
sns.regplot(x=x2, y=y2, ax=ax2, fit_reg=False, scatter_kws={'alpha': 0.6, 'color': 'darkorange'})

# 设置坐标轴标签
ax1.set_xlabel('X Variable 1', fontsize=10)
ax1.set_ylabel('Y Variable', fontsize=10)
ax2.set_xlabel('X Variable 2', fontsize=10)
# 因为共享Y轴,ax2不需要重复设置Y标签

# 设置标题
fig.suptitle('Scatter Plots with Reference Diagonal', fontsize=14, y=1.02)  # 全局大标题,上移避免重叠
ax1.set_title('Subplot 1: Diagonal + Scatter', fontsize=12)
ax2.set_title('Subplot 2: Scatter Only', fontsize=12)

# 添加图例(仅ax1需要,因为只有它有对角线)
ax1.legend()

# 自动调整布局,避免标题、标签重叠
plt.tight_layout()

# 展示图形
plt.show()

关键细节说明:

  • 共享Y轴:通过sharey=True参数实现,让两个子图的Y轴刻度完全对齐,更便于横向对比数据
  • 对角线绘制:先获取数据的极值来确定对角线的起止点,确保线条能覆盖整个散点的分布范围,比硬编码固定值更适配不同数据
  • Seaborn散点配置:fit_reg=False用来关闭默认的拟合线,scatter_kws可以调整散点的透明度(避免重叠遮挡)和颜色,提升可读性
  • 标题与布局:用fig.suptitle设置全局大标题,y=1.02让标题稍微上移避免和子图标题重叠;plt.tight_layout()自动调整子图间距,解决标签、标题重叠问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:57