2017-04-23 18 views
0

私は複数のプロットをオープンしようとしていますが、いくつかの問題がありました。私がスレッドを使ってプロットを作成しようとすると、まずPythonはいくつかのウィンドウを開き、最初のウィンドウ以外のウィンドウを閉じます。マルチプロセッシングshow matplotlibプロット

別の質問では、私が試したマルチプロセッシングを使用することをお勧めしました。コードはエラーなく実行され、プロットは表示されません。
私は、私のメインプロジェクトに移る前に、とても簡単なものを手に入れようとしています。

# Import the necessary packages and modules 
import matplotlib.pyplot as plt 
import numpy as np 


#from threading import Thread 
import multiprocessing 

def plot(datax, datay, name): 
    # Prepare the data 
    x = datax 
    y = datay**2 
    # Plot the data 
    plt.scatter(x, y, label=name) 

    # Add a legend 
    plt.legend() 

    # Show the plot 
    plt.show() 



#plot(3,3,) 
''' 
for i in range(10): 
    t = Thread(target=plot, args=(i,i+1,i,)) 
    t.start() 
    ''' 
for i in range(2): 
    p = multiprocessing.Process(target=plot, args=(i, i, i)) 
    p.start() 

更新: 何らかの理由で、マルチプロセッシングは再び動作を停止。私は、プロセスを開くためにのみ関数multiP()を作成しようとしましたが、入力( 'value:')を追加しても機能しませんでした。私はこのようなデータを保存するつもりの特定のスレッドにデータを送信する方法を把握することはできません:dat = [[x、y0、y1、... yn]、[x、y0、y1、.. .yn]、...]と何かがdatに追加されたかどうかをチェックして各プロットプロセス。

import matplotlib.pyplot as plt 
 
import numpy as np 
 

 
import multiprocessing 
 
#multiprocessing.freeze_support() # <- may be required on windows 
 

 
def plot(datax, datay, name): 
 
    x = datax 
 
    y = datay**2 
 
    plt.scatter(x, y, label=name) 
 
    plt.legend() 
 
    plt.show() 
 

 
def multiP(): 
 
    if __name__ == "__main__": 
 
     for i in range(2): 
 
      p = multiprocessing.Process(target=plot, args=(i, i, i)) 
 
      p.start() 
 
if True: 
 
    #input('Vlaue: ') # while commented plots are shown 
 
    multiP()

+0

マルチプロセッシングまたはスレッドを使用する目的は正確には何ですか? – ImportanceOfBeingErnest

+0

まあ、基本的には、私がpyusb経由で得ているデータをプロットし、それをリアルタイムで複数のグラフにプロットできるようにする必要があります。 – user169808

+0

ここで使用されているマルチプロセッシングは、リアルタイムプロットは、プロセスが開始されるとプロセスと通信する必要があるためです。 – ImportanceOfBeingErnest

答えて

0

所望のように、次のコードは、2つの数字を生成します。

import matplotlib.pyplot as plt 
import numpy as np 

import multiprocessing 
#multiprocessing.freeze_support() # <- may be required on windows 

def plot(datax, datay, name): 
    x = datax 
    y = datay**2 
    plt.scatter(x, y, label=name) 
    plt.legend() 
    plt.show() 

def multiP(): 
    for i in range(2): 
     p = multiprocessing.Process(target=plot, args=(i, i, i)) 
     p.start() 

if __name__ == "__main__": 
    input('Value: ') 
    multiP() 
+0

コードの作業は、私は再び問題に遭遇した。 forループの前にx = input( 'Value:')を追加しました。グラフは再び表示されません。ループにprint( 'hi')を追加して、それが入力されているかどうかを確認します( – user169808

+0

)これはスクリプトとしてのみ実行される部分にあるはずです。答えにコメントを付けました。 – ImportanceOfBeingErnest

+0

この場合も、入力はスクリプトとして使用された場合にのみ更新されるコードの一部である必要があります。 – ImportanceOfBeingErnest

関連する問題