使用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
相关产品推荐
相关产品推荐

