2017-12-17 18 views
0

呼び出されたときに既存のグラフにプロットを追加する関数を持っていたいと思います。今私の空のプロットが表示されますが、私はチャートウィンドウを閉じるまで、関数が決して起こるようには見えません。その後、チャートウィンドウを再度開くことなく、プログラムは終了します。既存のmatplotlibグラフに2番目のプロットを追加する

import numpy as np 
import matplotlib.pyplot as plt 
import time 

fig, ax = plt.subplots() 
plt.show() 
def plotting(slope, intercept): 

    x_vals = np.array(ax.get_xlim()) 
    y_vals = intercept + slope * x_vals 
    ax.plot(x_vals, y_vals, '-') 
    plt.show() 

plotting(10,39) 
time.sleep(1) 
plotting(5,39) 

答えて

3

plt.show()は、スクリプトの最後に一度だけ呼び出されることを意図しています。プロッティングウィンドウが閉じられるまでブロックされます。

対話モード(plt.ion())を使用し、プロットを中間ステップ(plt.draw())で描画することができます。一時停止を取得するには、time.sleep()を使用しないでください。アプリケーションが文字通りスリープ状態になるため(フリーズしたウィンドウが表示される可能性があるため)。代わりにplt.pause()を使用してください。最後に、対話モードを再びオフにして(plt.ioff())、最後にplt.show()を呼び出して、プロットを開いたままにします。

import numpy as np 
import matplotlib.pyplot as plt 

plt.ion() 
fig, ax = plt.subplots() 

def plotting(slope, intercept): 

    x_vals = np.array(ax.get_xlim()) 
    y_vals = intercept + slope * x_vals 
    ax.plot(x_vals, y_vals, '-') 
    plt.draw() 

plotting(10,39) 
plt.pause(1) 
plotting(5,39) 

plt.ioff() 
plt.show() 
2

plt.show()にオプションのキーワード引数block=Falseを送信します。

説明:プロットウィンドウがプログラムの続行をブロックします。この引数を送信すると、プログラムは続行されます。 その引数のみを使用してプログラムが終了すると、プロットウィンドウは閉じられます。したがって、プログラムの最後にplt.show(block=True)またはplt.waitforbuttonpress()に電話することができます。


個人的に私は自分自身の機能のためのブロック引数を追加するために行くだろう:

def plotting(slope, intercept, block=True): 

    x_vals = np.array(ax.get_xlim()) 
    y_vals = intercept + slope * x_vals 
    ax.plot(x_vals, y_vals, '-') 
    plt.show(block=block) 

plotting(10,39,False) 
time.sleep(1) 
plotting(5,39) 
関連する問題