0

我只是想在我的情节中添加一个暂停子句,我可以在其中自愿暂停实时流。这就是我正在尝试的。这是经过编辑的代码。它正在制作两个子图:散点图和饼图。我可以暂停散点图,但是当我暂停时饼图消失了。

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......

根据下面的评论进行编辑 我看不出您更新的代码哪里出错了;这个最小的例子可以毫无问题地更新scatter和图表。pie

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 回答