Mathplotlib Slider verknüpfen
Verfasst: Freitag 29. April 2016, 11:28
Hallo
ich würde gerne mehrere Slider in meine Plot einbauen, sodass ich die x-Achse verkleinern/vergrößern kann und auch zwischen Teilabschnitten in Datensätzen wechseln kann.
Erste Hilfe fand ich hier : http://matplotlib.org/examples/widgets/slider_demo.html
Allerdings scheitert es am meinem Verständnis es auf meinen Code umzubauen.
Mein Plot wird hier erstellt:
Das Erstellen der Slider an sich ist kein Problem, allerding weiß ich nicht, wie die update Funktion (wie in dem Link) auf mein Problem bezogen aussehen muss.
Ich brauche zwei Slider für die Werte "startzeit" "endzeit" um im Plot sozusagen zoomen zu können und (erstmal) einen um bei "Plot_Eins = _test1(1,1)" die Ziffer x (1,x) verändern zu können. Natürlich soll sich der Plot daraufhin entsprechend anpassen.. Aber hier weiß ich einfach nicht weiter
Kann jemand helfen?
ich würde gerne mehrere Slider in meine Plot einbauen, sodass ich die x-Achse verkleinern/vergrößern kann und auch zwischen Teilabschnitten in Datensätzen wechseln kann.
Erste Hilfe fand ich hier : http://matplotlib.org/examples/widgets/slider_demo.html
Allerdings scheitert es am meinem Verständnis es auf meinen Code umzubauen.
Mein Plot wird hier erstellt:
Code: Alles auswählen
####### Hier hole ich aus einem Datensatz Blöcke mit je 8192 Werten raus
def _test1(kanal,block):
block = block -1
kanal = kanal-1
s = 8192*kanal+(block*4*8192)
e = 8192*kanal+8192+(block*4*8192)
return b1[s:e]
#### Zeitachse, Umrechnen in us
for i in range(0,8192):
d = 0.05*i
time.append(round(d, 2))
#####
##########################################Kanal und Block zum Plotten bestimmen, und Abschnitt auf x-Achse wählen
Plot_Eins = _test1(1,1)
Plot_Zwei = _test1(1,2)
Plot_Drei = _test1(1,3)
startzeit = 0 ## in us
endzeit = 400 ## in us
#######################################################################
#### Plotten
f, (ax1, ax2, ax3, ax4) = plt.subplots(4, sharex=True, sharey=True)
ax1.set_title('Vergleich')
ax1.plot(time, Plot_Eins, color = "r", label = testname1+ ": Amplitude = "+str(_amplitude(Plot_Eins))+"mV")
ax1.set_ylabel('mV')
ax1.legend(bbox_to_anchor=(0.4, 1), loc=2, borderaxespad=0.)
ax2.plot(time, Plot_Zwei, color = "b", label = testname2+ ": Amplitude = "+str(_amplitude(Plot_Zwei))+"mV")
ax2.set_ylabel('mV')
ax2.legend(bbox_to_anchor=(0.4, 1), loc=2, borderaxespad=0.)
ax3.plot(time, Plot_Drei, color = "g", label = testname3+ ": Amplitude = "+str(_amplitude(Plot_Drei))+"mV")
ax3.legend(bbox_to_anchor=(0.4, 1), loc=2, borderaxespad=0.)
ax3.set_ylabel('mV')
ax4.plot(time, Plot_Eins, color = "r")
ax4.plot(time, Plot_Zwei, color = "b")
ax4.plot(time, Plot_Drei, color = "g")
ax4.set_ylabel('mV')
##x-Achsenlimits festlegen
if (endzeit-startzeit <= 10):
set_ticks = 1
elif (endzeit-startzeit <= 50):
set_ticks = 5
elif (endzeit-startzeit <= 100):
set_ticks = 10
else:
set_ticks = 20
plt.xlim([startzeit, endzeit])
xticks = np.arange(startzeit, endzeit+set_ticks, set_ticks)
plt.xticks(xticks)
plt.xlabel('Zeit in us')
Code: Alles auswählen
def update(val):
amp = samp.val
freq = sfreq.val
l.set_ydata(amp*np.sin(2*np.pi*freq*t)) ###set_ydata ???
fig.canvas.draw_idle() ###canvas.draw ??? brauch ich das?
sfreq.on_changed(update)
samp.on_changed(update)

Kann jemand helfen?