我能在每个循环中生成和展示不同的图片吗?

7

我是Matplotlib和Python的新手。我主要使用Matlab。目前,我正在使用Python代码工作,我想运行一个循环。在每个循环中,我将进行一些数据处理,然后根据处理后的数据显示图像。当我进入下一个循环时,我希望之前存储的图像被关闭,并基于最新数据生成新的图像。

换句话说,我想要一个Python代码等价于以下Matlab代码:

x = [1 2 3];

for loop = 1:3

    close all;

    y = loop * x;

    figure(1);

    plot(x,y)

    pause(2)

end

我尝试了以下Python代码来实现我的目标:
import numpy as np
import matplotlib
import matplotlib.lib as plt

from array import array
from time import sleep

if __name__ == '__main__':

    x = [1, 2, 3]

    for loop in range(0,3):

        y = numpy.dot(x,loop)

        plt.plot(x,y)

       plt.waitforbuttonpress

    plt.show()

这段代码将所有的图形叠加在同一张图中。如果我把plt.show()命令放在for循环内部,只会显示第一张图片。因此,我无法在Python中复制我的Matlab代码。

1个回答

15

尝试这样做:

import numpy
from matplotlib import pyplot as plt

if __name__ == '__main__':
    x = [1, 2, 3]
    plt.ion() # turn on interactive mode
    for loop in range(0,3):
        y = numpy.dot(x, loop)
        plt.figure()
        plt.plot(x,y)
        plt.show()
        _ = input("Press [enter] to continue.")

如果你想在显示下一个图表之前关闭上一个图表:

import numpy
from matplotlib import pyplot as plt
if __name__ == '__main__':
    x = [1, 2, 3]
    plt.ion() # turn on interactive mode, non-blocking `show`
    for loop in range(0,3):
        y = numpy.dot(x, loop)
        plt.figure()   # create a new figure
        plt.plot(x,y)  # plot the figure
        plt.show()     # show the figure, non-blocking
        _ = input("Press [enter] to continue.") # wait for input from the user
        plt.close()    # close the figure to show the next one.

plt.ion()打开交互模式,使plt.show非阻塞。

这是你的Matlab代码的副本:

import numpy
import time
from matplotlib import pyplot as plt

if __name__ == '__main__':
    x = [1, 2, 3]
    plt.ion()
    for loop in xrange(1, 4):
        y = numpy.dot(loop, x)
        plt.close()
        plt.figure()
        plt.plot(x,y)
        plt.draw()
        time.sleep(2)

不需要将raw_input的返回值分配给名为_的变量。如果您不打算使用该值,可以在一行上只使用raw_input(“blah”) - BrenBarn
1
是的,我非常清楚这一点,这就是为什么它是'_'的原因,我这样做的原因是,当您在终端上复制和粘贴时,它不会打印任何raw_input返回的内容,然后再次大多数plt命令返回对象...所以这取决于用户,无论如何,我已经翻译了他的原始matlab代码,如果我理解正确的话... - Samy Vilar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接