2016-06-29 10 views
0

私は単に私のプロットに一時停止句を入れて、リアルタイムストリームを自発的に一時停止することができます。 これは私が試みていることです。これは編集されたコードです。散布図と円グラフの2つのサブプロットを作っています。散布図を一時停止することはできますが、一時停止すると円グラフが消えます。クリック時データのリアルタイムプロットを一時停止

def onClick(event): 
    global pause 
    pause ^= True 
fig = plt.figure() 
fig.canvas.mpl_connect('button_press_event', onClick) 
plt.show() 

while t<ran2:  
     if not pause: 
     ax = fig.add_subplot(2,1,1) 
     ay = fig.add_subplot(2,1,2) 
     mdfmt = md.DateFormatter('%H:%M') 
     ax.xaxis.set_major_formatter(mdfmt) 
     cmap=cm.jet 
     g=s[t:t+4] 
     h=[] 
     for i in g: 
      if i == 'Match': 
       h.append(1) 
      else: 
       h.append(0) 
     ax.scatter(x[t:t+4],y[t:t+4],c=h,s=150,marker='<',edgecolor='None', cmap = cm.jet) 
     ax.set_xlabel('Time') 
     ax.set_ylabel('Action') 
     mindate = min(data_mat['Date'].ix[t:t+4]) 
     ax.set_title('Alarm System for site SPFD02 on date %s'%mindate) 
     yt=[-1,0,1] 
     ax.set_yticks(yt) 
     ax.set_yticklabels(('Closed','Not Ack','Assigned')) 
     ax.set_xlim(x[t],x[t+4])  

# for pie chart 
     l = 'Match','No-Match' 
     colors = ['red','blue'] 
     j = s[t:t+4].count('Match') 
     z = z + j 
     k = s[t:t+4].count('No-Match') 
     r = r + k 
     sizes = [z,r] 
     ay.pie(sizes,labels = l, colors = colors, autopct='%1.1f%%', shadow=True, startangle=140) 
     ay.set_aspect('equal')   
     t=t+1 
    else: 
     print 'paused' 
plt.pause(0.1) 
plt.cla() 
+0

[この](http://stackoverflow.com/questions/11874767/real-time-plotting-in-while-loop-with-matplotlib)SOの質問は、あなたを支援することがあります。受け入れられた答えには一時停止についての何かがあります。これはおそらくあなた自身のコードで少し微調整して使うことができます。 – kirkpatt

+0

@kirkpatt:私はリアルタイムストリームに一時停止を与えることができますが、マウスをクリックするかキーボードを使用して外部を一時停止したいと思います。 – nezz

答えて

0

あり(matplotlib.animationを使用して、例えばこの参照:https://stackoverflow.com/a/16733373/3581217答えを)これを達成するためのよりエレガントな方法がありますが、あなたが提供した例の精神の範囲内で、これは機能的に動作します:

import matplotlib.pylab as pl 

pause = False 

def onClick(event): 
    global pause 
    pause ^= True 

fig = pl.figure() 
fig.canvas.mpl_connect('button_press_event', onClick) 

nt = 100 
t = 0 
while t < nt: 
    if not pause: 
     # do stuff 
     print("update plot!") 
     t += 1 
    else: 
     print("paused") 
    pl.pause(0.1) 

トリックは、(あなたはonClick機能でそれを設定したが、また、ループ内...?)pauseglobal変数を作るためにonClick機能トグル(^=pauseTrue/Falseの間にありますpauseの状態に基づいて、"do stuff"のいずれかに基づいています。 以下のコメントをもとに

しかし、再び、それはmatplotlib.animationに見てより多くの意味をなすかもしれない...

EDITあなたの更新されたコードが間違ってどこに行くか、私は表示されません。この最小限の例では、scatterpieのグラフが問題なく更新されています。

import matplotlib.pylab as plt 
import numpy as np 

pause = False 

def onClick(event): 
    global pause 
    pause ^= True 

fig = plt.figure() 
fig.canvas.mpl_connect('button_press_event', onClick) 

nt = 100 
x = np.random.random(nt+4) 
y = np.random.random(nt+4) 
s = np.random.random(nt+4) 

t = 0 
while t < nt: 
    if not pause: 
     ax = fig.add_subplot(2,1,1) 
     ay = fig.add_subplot(2,1,2) 

     ax.scatter(x[t:t+4], y[t:t+4]) 
     ay.pie(s[t:t+4]) 
     t += 1 
    plt.pause(0.1) 
+0

こんにちは@bart:今、私はプロットを一時停止することができますが、私が直面している問題は、散布図が一時停止して静止図を示していますが、円グラフ(別のサブ図)は消えてしまいます。この問題を克服する方法。ありがとうございます – nezz

+0

あなたは私たちにもっと情報/コードを提供しなければなりません。さもなければ、何が間違っているかについて非常に野生的な推測をしなければなりません。 – Bart

+0

こんにちは@私は私の記事を編集..それを見てください。私は散布図と円グラフの2つのサブプロットを作っています。今私はプロットを一時停止することができますが、一時停止すると円グラフが消え、プロットを開始するときに再び表示されます。ありがとう – nezz

関連する問題