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() 
4

1 に答える 1

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)

秘訣は、変数を作成pauseすることglobalです(onClick関数で設定していましたが、ループ内でも...?)、関数は の間でonClickトグル(^=)し、「何かをするかどうかの状態に基づいています。pauseTrue/Falsepause

しかし、繰り返しますが、調べたほうが理にかなっているかもしれませんmatplotlib.animation...

以下のコメントに基づいて編集 します更新されたコードがどこで間違っているのかわかりません。この最小限の例では、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)
于 2016-06-30T10:30:10.373 に答える