So ein paar Dinge hier, sollten Sie sich über die ordnungsgemäße Verwendung der numpy ufuncs lernen, die ohne über sie zu Schleife auf ndarrays arbeiten:
https://docs.scipy.org/doc/numpy-1.12.0/reference/ufuncs.html
Zweitens haben Sie einen Platz haben, wo ein Update-Ereignis ausgelöst wird, zum Beispiel:
http://openbookproject.net/thinkcs/python/english3e/events.html
Da es keine solche Beispiele in diesem Code sind, werde ich nur annehmen, dass Sie wissen, wo das passieren wird. Wo immer das passiert, brauchen Sie ein Handle der Linie, um die Daten zu aktualisieren.
https://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D.set_xdata https://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D.set_ydata
Hier ist einige hervorheben Beispiel-Code, was ich glaube, Sie versuchen zu tun:
import numpy as np
import matplotlib.pyplot as plt
l = 100
x = np.linspace(0, 2 * np.pi, l)
y = np.sin(x)
fig, ax = plt.subplots(1, 1) # generate figure and axes objects so that we have handles for them
curve = ax.plot(x, y)[0] # capture the handle for the lines object so we can update its data later
# now some kind of event happens where the data is changed, and we update the plot
y = np.cos(x) # the data is changed!
curve.set_ydata(y)
# necessary if you are just executing this as a script
# this example is a little more clear if executed stepwise in ipython
plt.show(block=True)
sind die ufuncs effizienter als Looping? – Dole
Ja. Abgesehen davon, dass der Code sauberer und prägnanter ist, ist er rechnerisch wahrscheinlich eine Größenordnung schneller, wenn nicht sogar mehr, da die gesamte Berechnung in einem c-Funktionsaufruf behandelt wird. In der Tat kann das Schleifen eines numpy-Arrays langsamer sein als das Durchlaufen einer Python-Liste, da viele Funktionen in einer Schleife aufgerufen werden müssen –