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

使用plt.subplots绘制多子图时散点全部堆叠在最后一个子图问题求解

问题原因

你代码的核心问题是误用了matplotlib的绘图接口:

  • plt.subplots()返回的ax1~ax4是4个独立的坐标轴实例,要在指定子图上绘图,需要调用对应坐标轴实例自己的绘图方法
  • plt.scatter()是pyplot的全局绘图方法,默认只会在当前处于激活状态的坐标轴(你代码里最后创建的ax4)上绘图,所以所有散点都堆叠到了最后一张子图上
  • 你代码里用ax1=plt.scatter(...)的写法还会覆盖原本的坐标轴实例,把散点容器对象赋值给了ax1变量,进一步破坏了原有的子图结构

修正后代码

import matplotlib.pyplot as plt

fig, (ax1, ax2, ax3, ax4) = plt.subplots(1, 4, figsize=(20, 5))
# 每个子图调用自身的scatter方法绘图
ax1.scatter(SenRev(data1959)[:, 0], SenRev(data1959)[:, 1])
ax2.scatter(SenRev(data1979)[:, 0], SenRev(data1979)[:, 1])
ax3.scatter(SenRev(data1999)[:, 0], SenRev(data1999)[:, 1])
ax4.scatter(SenRev(data2019)[:, 0], SenRev(data2019)[:, 1])

# 可选:给子图添加标题调整显示效果
ax1.set_title("1959年数据")
ax2.set_title("1979年数据")
ax3.set_title("1999年数据")
ax4.set_title("2019年数据")

plt.show()

原错误效果参考

错误效果图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:15:03