Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib:同时绘制到不同的绘图_Python_Python 3.x_Matplotlib - Fatal编程技术网

Python matplotlib:同时绘制到不同的绘图

Python matplotlib:同时绘制到不同的绘图,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,由于第二个答案,我假设以下代码 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

由于第二个答案,我假设以下代码

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

您已经在保存
对象,因此使用对象的
绘图
功能,而不是调用PyPlot
绘图
功能(该功能利用上次创建或激活的
):

ax.plot(...)
如果您随后为这两个名称指定了不同的名称,例如
ax1
ax2
,则可以在不影响其他名称的情况下绘制所需的名称。所有
plt.
命令也作为
Axes
成员函数存在,但有时名称会更改(
plt.xticks
变为
ax.set\xticks
)。有关详细信息,请参阅

要保存到地物,请以相同的方式使用
地物
对象:

f.savefig(...)

仅供参考,这种API类型才刚刚出现在Matlab中,将来可能会取代老式的“绘制最后一个活动绘图”行为。这里的面向对象方法更灵活,开销最小,因此我强烈建议您在任何地方都使用它。

您已经在保存
对象,因此,不要调用PyPlot
plot
函数(它利用上次创建或激活的
),使用对象“
plot
功能:

ax.plot(...)
如果您随后为这两个名称指定了不同的名称,例如
ax1
ax2
,则可以在不影响其他名称的情况下绘制所需的名称。所有
plt.
命令也作为
Axes
成员函数存在,但有时名称会更改(
plt.xticks
变为
ax.set\xticks
)。有关详细信息,请参阅

要保存到地物,请以相同的方式使用
地物
对象:

f.savefig(...)

仅供参考,这种API类型才刚刚出现在Matlab中,将来可能会取代老式的“绘制最后一个活动绘图”行为。这里的面向对象方法更灵活,开销最小,因此我强烈建议您在任何地方都使用它。

如果不确定,最好明确:

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

如果不确定,最好明确说明:

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

我不太明白你为什么要把foo_1和foo_2写两次到文件中,还有,你能清楚地说明你想要的行为吗?这只是一个简单的例子,我想在foo_1.jpg和foo_2.jpg中绘制一些东西。所需的行为如下:执行几次:(1)创建一个绘图并为其绘制一些内容,(2)创建一个新绘图,在其中绘制一些内容,然后保存并关闭它(3)返回到上一个绘图,并在其中绘制其他内容,然后保存它。我不太明白为什么要将foo_1和foo_2写入文件两次,你能清楚地说明你想要的行为吗?这只是一个最小的例子,我想在foo_1.jpg和foo_2.jpg中绘制一些东西。所需的行为如下:执行几次:(1)创建一个绘图并为其绘制一些内容,(2)创建一个新绘图,在其中绘制一些内容,然后保存并关闭它(3)返回到上一个绘图,并在其中绘制其他内容,然后保存它。我们为什么要谈论matlab?非常有用,谢谢!但是我的问题中提到的答案是错误的,不是吗?@tom除了我,没有人在谈论Matlab。还有你,现在。我之所以提出这个问题,是因为Pyplot API是按照MatlabAPI建模的,“面向对象API”不是。@corinna这没有错,这是解决问题的另一种方式。调用
plt.figure(1)
将当前图形设置为创建的第一个图形,就像在Matlab中一样,调用
figure(1)
将激活第一个图形。这种方式引入隐藏状态(即哪个图形是当前的?),当直接使用对象时,从代码中可以清楚地看到正在做的事情。对,但是面向对象的方法在matplotlib中已经存在很长时间了,将其添加到与matlab无关的答案中感觉很奇怪。但是,你知道,每个人都是他/她自己的为什么我们要谈论matlab?很好,非常感谢!但是我的问题中提到的答案是错误的,不是吗?@tom除了我,没有人在谈论Matlab。还有你,现在。我之所以提出这个问题,是因为Pyplot API是按照MatlabAPI建模的,“面向对象API”不是。@corinna这没有错,这是解决问题的另一种方式。调用
plt.figure(1)
将当前图形设置为创建的第一个图形,就像在Matlab中一样,调用
figure(1)
将激活第一个图形。这种方式引入隐藏状态(即哪个图形是当前的?),当直接使用对象时,从代码中可以清楚地看到正在做的事情。对,但是面向对象的方法在matplotlib中已经存在很长时间了,将其添加到与matlab无关的答案中感觉很奇怪。但是,你知道,每个人都有自己的权利