6

Matplotlib と Python は初めてです。私は主にMatlabを使用しています。現在、ループを実行したい Python コードを使用しています。各ループで、何らかのデータ処理を行い、処理されたデータに基づいて画像を表示します。次のループに進むときに、以前に保存した画像を閉じて、最新のデータに基づいて新しい画像を生成したいと考えています。

つまり、次の Matlab コードに相当する python コードが必要です。

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

このコードは、すべてのプロットを同じ Figure に重ね合わせます。plt.show()コマンドを for ループ内に配置すると、最初の画像のみが表示されます。そのため、Matlab コードを Python で複製できませんでした。

4

1 に答える 1

13

これを試して:

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ノンブロッキングにするインタラクティブモードをオンにします。

そしてheresはあなたの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)
于 2012-06-21T00:04:10.327 に答える