2017-12-31 7 views
0

Ich aktualisiere ein Liniendiagramm. Es gibt einen Ereignis-Trigger, der diese Aktualisierung startet. Wenn der Auslöser von der Figur kommt, die die Handlung enthält, ist alles in Ordnung. Wenn der Auslöser jedoch von einer anderen Figur stammt, treten merkwürdige Ergebnisse auf: Die Zeile, die aktualisiert wurde, scheint ihre Spur nicht zu löschen. HierDas Aktualisieren eines Plots löscht alte Plots nicht, wenn der Ereignisauslöser von einer anderen Figur stammt?

ein Beispiel:

import matplotlib.pyplot as plt 
import numpy as np 

def onclick(event): 

    for ii in np.linspace(0., np.pi, 100): 
     y1 = y * np.sin(ii) 
     line1.set_ydata(y1) 
     ax.draw_artist(line1) 
     line2.set_ydata(-y1) 
     ax2.draw_artist(line2) 
     ax2.set_ylim(y1.min(), y1.max()) 
     fig.canvas.update() 
     plt.pause(0.1) 


x = np.linspace(0., 2*np.pi, 100) 
y = np.sin(x) 

fig = plt.figure() 
ax = fig.add_subplot(1, 2, 1) 
line1 = ax.plot(x, y)[0] 

ax2 = fig.add_subplot(1, 2, 2) 
line2 = ax2.plot(x, y)[0] 


fig2 = plt.figure() 

cid = fig2.canvas.mpl_connect('button_press_event', onclick) 

plt.show() 

Was sehe ich auf dem Bildschirm:

wrong

Bitte beachten Sie, wenn Sie den Plot Größe ändern oder es als Zahl speichern, dann wird der ganze Rest Das Bild wird weg sein.

Auf der anderen Seite, wenn eine Änderung einer Zeile:

cid = fig2.canvas.mpl_connect('button_press_event', onclick) 

dann ist es richtig. Die Animation funktioniert wie vorgesehen.

Antwort

0

Nicht sicher, was fig.canvas.update() tun würde. Wenn Sie diese Zeile durch

ersetzen, sollte es wie erwartet funktionieren. In diesem Fall müssten Sie die Künstler nicht individuell zeichnen.