28

Matplotlib のインタラクティブ機能に問題があります。次のプログラムを実行したところ、凍結した空のグラフ ウィンドウが表示されました。

import matplotlib.pyplot as plt
import numpy as np

plt.ion()
x = np.arange(0, 4*np.pi, 0.1)
y = [np.sin(i) for i in x]
plt.plot(x, y, 'g-', linewidth=1.5, markersize=4)
plt.show()

「plt.ion()」ステートメントを削除すると、問題なく機能しました。IDLE を使用しており、Matplotlib バージョン 1.2.x パッケージが Python 3.2.2 にインストールされています。

私はそれがインタラクティブであることを期待していますが、代わりに、友好的でない非インタラクティブなウィンドウが表示されました。誰かが私が欠けているものに光を当てることができますか? 前もって感謝します。

4

2 に答える 2

55

ここにあるこのリンクに出くわしました。これは私の問題に答えます。

を介してインタラクティブモードをオンにした後、pyplot を介しplt.ion()て更新/再描画するために、pyplot を一時停止する必要があるようplt.pause(0.0001)です。これが私がやったことで、うまくいきます!

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> plt.ion()
>>> x = np.arange(0, 4*np.pi, 0.1)
>>> y = [np.sin(i) for i in x]
>>> plt.plot(x, y, 'g-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)         
>>> plt.plot(x, [i**2 for i in y], 'g-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)
>>> plt.plot(x, [i**2*i+0.25 for i in y], 'r-', linewidth=1.5, markersize=4) 
>>> plt.pause(0.0001)

IDLE コンソールでこれを試した場合は、グラフ ウィンドウがフリーズして終了できないことを除いて、この時点まですべてが表示されていることに注意してください。フリーズを解除するには、次の最後のステートメントを入力します

>>> plt.show(block=True)

これでウィンドウを閉じることができます。

于 2012-10-02T07:18:10.603 に答える
6

私はまったく同じ問題を抱えています。ipython には magic があり%matplotlib、これで問題が解決しました。少なくとも今はplt.figure()(それが呼び出されたと仮定しimport matplotlib.pyplot as pltて) 入力して、完全にインタラクティブなレスポンシブ Figure を取得できます。

ただし、問題を理解できるようにするために、この魔法が何を正確にインポートするのかを知りたいと思っています。

于 2014-07-09T11:46:34.920 に答える