目標:繪製圖(x,y)並在圖w.r.t上將垂直線移動到計時器。Matplotlib圖中的進度線
我開始使用matplotlib來實現這個功能。它可能使用matplotlib的draw()特性來實現,但它會消耗CPU,因爲它每次都會重繪,並且不允許我與圖形進行交互。所以我決定使用matplotlib的動畫功能。在未來,我會喜歡暫停移動的線路。所以我不能使用matplotlib.animation.FuncAnimatin
問題:我使用canvas.copy_from_bbox(ax.bbox),ax.draw_artist(line),canvas.blit(ax.bbox)。 但是,我無法將圖形存儲在背景中並在其上移動一行。當我嘗試存儲時,它會以相當怪異的方式覆蓋。
這是我建立的代碼。任何人都可以幫我嗎?提前致謝。
import sys
import matplotlib.pyplot as p
import time
fig=p.figure();
ax = fig.add_subplot(1,1,1)
y=[];x=[];y1=[0,1000];x1=[0,0]
y=numpy.random.randn(1000,1)*100
x=numpy.arange(0,1000)
line1, = ax.plot(x,y,color='black');
ax.set_ylim(0, 1000);
line, = ax.plot(x1,y1,color='r',alpha=1,animated=True); # this is the line which i wanted to move over the graph w.r.t to time. (i can also use axvline , but i guess its the same).
canvas = ax.figure.canvas
canvas.draw()
background = canvas.copy_from_bbox(ax.bbox); #my problem is here
starttime=time.time();
mytimer=0;
mytimer_ref=0;
def update(canvas,line,ax):
canvas.restore_region(background) #my problem is here
t=time.time()-starttime;
mytimer=t+mytimer_ref;
x1=[mytimer,mytimer];
line.set_xdata(x1);
ax.draw_artist(line)
canvas.blit(ax.bbox) #my problem is here
def onclick(event):
global starttime
starttime=time.time();
global mytimer_ref;
mytimer_ref=event.xdata;
print "starttime",starttime;
cid=line1.figure.canvas.mpl_connect('button_press_event',onclick); # when i click the mouse over a point, line goes to that point and start moving from there.
timer=fig.canvas.new_timer(interval=100);
args=[canvas,line,ax];
timer.add_callback(update,*args); # every 100ms it calls update function
timer.start();
p.show();
什麼是 「相當不可思議的方式」 你指什麼? – pelson 2012-08-14 07:29:47