【发布时间】:2020-10-01 23:36:48
【问题描述】:
我目前正在尝试将多个图组合成一个图(带有子图)。请查看以下代码:
import matplotlib.pyplot as plt
a = list(range(1,10))
b = list(map(lambda x: x**2, a))
c = list(map(lambda x: x**3, a))
d = list(map(lambda x: x+200, a))
plots = []
plt.plot(a, b)
plots.append(plt.gcf())
plt.close()
plt.plot(a, c)
plots.append(plt.gcf())
plt.close()
plt.plot(b, c)
plots.append(plt.gcf())
plt.close()
plt.plot(a, d)
plots.append(plt.gcf())
plt.close()
fig, ax = plt.subplots(len(plots))
for i,plot_obj in enumerate(plots, start=1):
print(f"{i=}, {plot_obj=}")
ax[i].set_figure(plot_obj)
plot_obj.show()
plt.tight_layout()
plt.show()
# plt.savefig('temp.png')
我的限制是 -
- 绘图将更早创建 - 我将
figure对象存储在列表中。 - 这些图需要稍后在代码中访问,并且需要创建一个图,每个图都作为子图。
在运行上述代码时,我在尝试设置每个子图的图形时遇到了错误 - RuntimeError: Can not put single artist in more than one figure。思考过程是用保存的figure 对象设置每个子图的图形。有没有办法做到这一点?
谢谢!
【问题讨论】:
-
为什么不使用子图,见here
-
@ted930511 这没有帮助。该链接告诉您如何绘制多个子图,我正在寻找的内容比这更具体。之前生成图,之后需要通过编译所有图来创建单个图。
-
我想要这个功能,因为单个图形的绘制成本很高?
-
问题是不带参数调用
plt.figure()会创建一个 new 图形,因此您的代码附加到plots列表的是那些新图形,而不是那些你想要的。 -
@Arne 是的,你是对的。我现在更新了代码。我可以在遍历绘图时将图形保存在文件中,但我无法使用子绘图作为每个保存的绘图来构建最终绘图。
标签: python matplotlib plot