2016-07-13 21 views
0

同志、プロセス終了後にmatplotlibプロットを維持する方法

私はいくつかのmatplotlibプロットを生成して終了する関数を持っています。私はそれが終わった後にプロットを残しておきたい。

  • インタラクティブモードをオンに設定すると、プロットは表示され、ブロックされず、機能が終了すると消えます。私はこれを望んでいない。
  • インタラクティブモードをオフに設定すると、プロットが表示された後、閉じるまでブロックされ、関数が終了します。私はこれも望んでいない。

目的の動作は次のとおりです。プロットは表示され、ブロックされず、関数の終了後も残ります。

だから、これを行う方法はありますか?最も可能性の高いアプローチはマルチプロセッシングのようです。私はちょうど画像としての図を保存して開くことができます知っている

from multiprocessing import Process 
import matplotlib.pyplot as plt 
import numpy as np 

def plot_graph(): 
    plt.plot(np.random.randn(10)) 
    plt.show() 

p = Process(target=plot_graph) 
p.start() 

をしかし、それは(少なくとも、MacOSの、バックエンドTkAggに)何も表示されません:私は、次のコードが動作するだろうと思っているだろうこれは私の望むものではありません。私はまだmatplotlibズームコントロールなどを使用したいと思います。

+0

'p.start()'の後に 'plt.show()'を移動してみてください。 – DavidG

+0

どういう意味ですか?新しいプロセスでは、showは開始後に呼び出されます。 – Peter

答えて

0

show()がブロックしていないかのように動作します。以下のようにplt.ioff()を追加してみてください。

from multiprocessing import Process 
import matplotlib.pyplot as plt 
import numpy as np 

def plot_graph(): 
    plt.plot(np.random.randn(10)) 
    plt.show() 

plt.ioff() 
p = Process(target=plot_graph) 
p.start() 
+0

私のために働かない...それはあなたのために働いたのですか? – Peter

+0

はい、ただし、一時停止することなく動作します。プログラムが終了している(showコマンドでブロックする必要がある)場合は、p =を設定する前にplt.ioff()を追加してみてください。 –

+0

元の答えを修正しました。それがあなたのために、私のためではない場合は、何らかのバックエンド問題をプロットする必要があります。 – Peter

関連する問題