2017-06-20 1 views
0

Ich möchte, dass ein Diagramm aktualisiert wird, wenn Parameterwerte geändert oder regelmäßig geändert werden. Ich habe den folgenden Code:Automatisches Aktualisieren eines Diagramms basierend auf Parameteränderungen

a=0` 
b=50 
c=100 

def sine(x,y,l): 
    A=numpy.zeros(l) 
    for i in range(l): 
     A[i]=numpy.sin(2*math.pi*(i+x)/y) 
    return A 


def plot(l): 
    matplotlib.pyplot.clf() 
    matplotlib.pyplot.plot(l) 

plot(sine(a,b,c))` 

`

Wie erhalte ich die Handlung Funktion aktualisiert oder periodisch jedes Mal, a/b/c ist erneut ausführen?

Antwort

2

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) 
+0

sind die ufuncs effizienter als Looping? – Dole

+0

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 –

Verwandte Themen