matplotlib:同时绘制到不同的图

时间:2016-02-22 14:38:26

标签: python python-3.x matplotlib

由于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.jpgbar_1.jpg,每个图显示蓝线和红线。

然而,数字看起来像

enter image description here

而不是

enter image description here

如何实现理想的行为? 请注意,在处理foo_*.jpg图时,必须关闭并保存地图bar

2 个答案:

答案 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))