由于this question的第二个答案,我认为以下代码
import matplotlib.pyplot as plt
for i1 in range(2):
plt.figure(1)
f, ax = plt.subplots()
plt.plot((0,3), (2, 2), 'b')
for i2 in range(2):
plt.figure(2)
f, ax = plt.subplots()
plt.plot([1,2,3], [1,2,3], 'r')
plt.savefig('foo_{}_bar_{}.jpg'.format(i2, i1))
plt.close()
plt.figure(1)
plt.plot( [1,2,3],[1,2,3], 'r')
plt.savefig('bar_{}.jpg'.format(i1))
plt.close()
创建图bar_0.jpg
和bar_1.jpg
,每个图显示蓝线和红线。
然而,数字看起来像
而不是
如何实现理想的行为?
请注意,在处理foo_*.jpg
图时,必须关闭并保存地图bar
。
答案 0 :(得分:2)
您已经保存了Axes
个对象,因此不要调用PyPlot plot
函数(使用最后创建或激活的Axes
),而是使用对象'{{ 1}}功能:
plot
如果你给它们两个不同的名字,比如ax.plot(...)
和ax1
,你可以在你喜欢的名字上画画而不会干扰另一个名字。所有ax2
命令也作为plt.
成员函数存在,但有时名称会更改(例如Axes
变为plt.xticks
)。有关详细信息,请参阅the documentation of Axes
。
要保存到数字,请以相同的方式使用ax.set_xticks
个对象:
Figure
此API类型仅仅是来自FYI的Matlab,并且可能会取代未来老式的“最后一个活动情节的绘制”行为。这里面向对象的方法更灵活,开销最小,所以我强烈建议你到处使用它。
答案 1 :(得分:2)
如果不确定,最好明确说明:
import matplotlib.pyplot as plt
for i1 in range(2):
fig1,ax1 = plt.subplots()
fig2,ax2 = plt.subplots()
ax1.plot([0,4],[2,2],'b')
for i2 in range(2):
ax2.plot([1,2,3],[1,2,3],'r')
fig2.savefig('abc{}.png'.format(2*i1+i2))
plt.figure(1)
ax1.plot([1,2,3],[1,2,3],'r')
fig1.savefig('cba{}.png'.format(i1))