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

Matplotlib子图仅左图显示圆形标签,中间和右图不显示的问题求助

问题排查与解决思路

常见原因及对应解法


1. 子图对象引用错误

如果你的代码中使用plt.scatter()而非子图的axes[i].scatter(),所有散点都会默认绘制到当前活跃的第一个子图上,中间和右侧子图自然看不到点。

正确操作方式:
确保每个子图的散点调用对应子图的坐标轴对象:

import matplotlib.pyplot as plt

# 创建1行3列子图,获取坐标轴数组
fig, axes = plt.subplots(1, 3, figsize=(12, 4))

# 左侧子图
axes[0].scatter(x_left, y_left, s=60, c='red')
axes[0].set_title('Left Subplot')

# 中间子图
axes[1].scatter(x_mid, y_mid, s=60, c='blue')  # 必须用axes[1]调用scatter
axes[1].set_title('Middle Subplot')

# 右侧子图
axes[2].scatter(x_right, y_right, s=60, c='green')  # 必须用axes[2]调用scatter
axes[2].set_title('Right Subplot')

plt.tight_layout()
plt.show()

2. 坐标点超出子图可视范围

中间/右侧子图的坐标轴范围可能没有包含散点的坐标,导致点被裁剪。

排查与解决:

  • 打印散点的x/y值,对比子图的坐标范围:
    print("Middle subplot x range:", axes[1].get_xlim())
    print("Middle scatter points:", x_mid, y_mid)
    
  • 让子图自动适配数据范围:
    axes[1].autoscale()  # 对中间子图生效
    axes[2].autoscale()  # 对右侧子图生效
    
  • 或者手动设置坐标范围:
    axes[1].set_xlim(min(x_mid)-1, max(x_mid)+1)
    axes[1].set_ylim(min(y_mid)-1, max(y_mid)+1)
    

3. 散点样式过于隐蔽

散点颜色与子图背景色一致、点大小设置过小,都会导致视觉上不可见。

临时验证方案:
强制设置大尺寸和高对比度颜色:

axes[1].scatter(x_mid, y_mid, s=100, c='black', edgecolor='white')
axes[2].scatter(x_right, y_right, s=100, c='black', edgecolor='white')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:46:12