Python使用matplotlib手动管理坐标轴实现三幅子图同画布问题
问题原因
- 代码中先后两次调用
plt.figure(),生成了两个完全独立的画布,所以第三个axes被添加到了第二个新画布上,没有和前两个子图放在一起。 - 给np对象直接新增sincx属性的写法不规范,建议直接用普通变量存储计算结果。
修复后代码
import matplotlib.pyplot as plt import numpy as np x = np.arange(-4*np.pi,4*np.pi,0.25) sincx = np.sin(x)/x # 只创建一次画布 plt.figure(num=3, figsize=(7,5)) # 添加前两个子图 plt.subplot(3,2,1) plt.plot(x, sincx) plt.subplot(3,2,2) plt.plot(x, sincx, "ro") # 直接获取当前已创建的画布,手动添加axes ax = plt.gcf().add_axes((0.125,0.1,0.775,0.45)) ax.plot(x, sincx**2) plt.show()
改动说明
- 删除了第二次新建画布的
fig = plt.figure()代码,改用plt.gcf()直接获取已经创建的第一个画布对象 - 把不规范的
np.sincx改为普通变量sincx,避免污染numpy命名空间 - 直接在第一个画布上手动添加axes,即可实现三个图放在同一张画布的效果
内容的提问来源于stack exchange,提问作者Dearsfs Asfrt
相关产品推荐
相关产品推荐

