Interaktive Darstellung mit Matplotlib
Es braucht nicht unbedingt Plotly und schon gar nicht Dash für eine interaktive Darstellung mit Python. Matplotlib selber bietet schon Controls wie Buttons und Sliders an.
Was man damit anfangen kann zeigt das folgende GIF:
Die Slider bestimmen die Parameter des Polynoms und bei jeder Aenderung wird das Diagramm neu gezeichnet.
Das Script
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
def polynom( x, coefficients ):
result = 0
factor = 1
for c in reversed(coefficients):
result += c * factor
factor *= x
return result
fig,ax = plt.subplots()
plt.subplots_adjust( bottom=0.4 )
plt.title("ax³ + bx² + cx + d")
plt.grid( alpha=0.5 )
ax.spines['right'].set_visible( False )
ax.spines['top'].set_visible( False )
ax.set_xlim( -10.2, 10.2 )
ax.set_ylim( -100, 100 )
axsld = plt.axes( [0.1,0.10,0.7,0.03])
axslc = plt.axes( [0.1,0.15,0.7,0.03])
axslb = plt.axes( [0.1,0.20,0.7,0.03])
axsla = plt.axes( [0.1,0.25,0.7,0.03])
sla = Slider( axsla, "a", -0.1, 0.1, 0 )
slb = Slider( axslb, "b", -1, 1, 0 )
slc = Slider( axslc, "c", -10, 10, 10 )
sld = Slider( axsld, "d", -50, 50, 0 )
coeff = [0,0,10,0]
x = [n/10 for n in range(-100,100,1)]
y = [polynom(px,coeff) for px in x]
line, = ax.plot( x, y )
def update( event ):
coeff[0] = sla.val
coeff[1] = slb.val
coeff[2] = slc.val
coeff[3] = sld.val
line.set_ydata( [polynom(px,coeff) for px in x] )
fig.canvas.draw_idle()
sla.on_changed( update )
slb.on_changed( update )
slc.on_changed( update )
sld.on_changed( update )
plt.show()
Ungewöhnlich ist vor allem wie die Flächen für die Slider definiert werden (axsld ... axsla). Die Slider selbst und der Eventhandler sind sehr ähnlich wie bei anderen Frameworks.