Matplotlib deslizador para parámetros

He estado tratando de graficar una función con dos parámetros que pueden variarse para ver un comportamiento diferente. Me gustaría usar un control deslizante para variar los parámetros.

En mi búsqueda he encontrado controles deslizantes que cambian los ejes pero no partes de una función matemática.

Así que tengo el siguiente código que debería funcionar si mis dos parámetros Gmax y Km fueran los ejes:

from matplotlib.widgets import Slider import numpy as np Gmax=1 Km= 1 def f(S): s1 = Gmax*S #G_max e1 = S + Km #K_m return divide(s1,e1) S=arange(0,100,0.1) ax = subplot(111) subplots_adjust(left=0.15, bottom=0.25) l = plot(f(S)) grid(False) title('Playing with sliders') xlabel('time') ylabel('concentration') axcolor = 'lightgoldenrodyellow' axGmax = axes([0.15, 0.1, 0.65, 0.03], axisbg=axcolor) axKm = axes([0.15, 0.15, 0.65, 0.03], axisbg=axcolor) sGmax = Slider(axGmax, 'Gmax', 0.1, 3.0, valinit=1) sKm = Slider(axKm, 'Km', 0.01, 1.0, valinit=1) def update(val): s1 = Gmax*S * sGmax.val e1 = S + Km * sKm.val l.set_ydata(y) ax.set_ylim(y.min(), y.max()) draw() sGmax.on_changed(update) sKm.on_changed(update) show() 

Entonces, supongo que mi pregunta es si hay un comando para parámetros en lugar del comando ax para los controles deslizantes de ejes. ¿O si hay otra forma de hacerlo?

Su código es casi correcto, pero debe cambiar l = plot(f(S)) a l, = plot(f(S)) porque plot () devuelve una lista. Luego puede llamar a l.set_ydata(...) para establecer el nuevo valor.

Aquí está el código:

 import matplotlib.pyplot as plt import pylab import numpy as np def f(S, Gmax, Km): s1 = Gmax*S # G_max e1 = S + Km # K_m return np.divide(s1, e1) def update(val): l.set_ydata(f(S, sGmax.val, sKm.val)) S = np.arange(0, 100, 0.1) ax = plt.subplot(111) plt.subplots_adjust(left=0.15, bottom=0.25) l, = plt.plot(f(S, 1.0, 1.0)) plt.grid(False) plt.title('Playing with sliders') plt.xlabel('time') plt.ylabel('concentration') axcolor = 'lightgoldenrodyellow' axGmax = plt.axes([0.15, 0.1, 0.65, 0.03], facecolor=axcolor) axKm = plt.axes([0.15, 0.15, 0.65, 0.03], facecolor=axcolor) sGmax = pylab.Slider(axGmax, 'Gmax', 0.1, 3.0, valinit=1) sKm = pylab.Slider(axKm, 'Km', 0.01, 1.0, valinit=1) sGmax.on_changed(update) sKm.on_changed(update) plt.show()