ich habe mit dem Qt Designer eine GUI erstellt und in dieser ein Matplotlib Widget eingebunden.
Mit der Tastatur kann ich dann die Skalierung der Kurven interaktiv ändern.
Mein Problem ist, dass ich die Linien nicht einzeln ändern kann, wenn diese in einem einzigen Subplot sind.
Die Y-Achse wird geändert aber der Bezug zur Linie fehlt.
Da ich zu beginn nicht weiß, wie viele Plots der Anwender machen möchte kann ich nicht ax1, ax2... schreiben und muss es in einer for-schleife machen.
Könnt ihr mir da vllt. helfen oder einen Tipp geben?
So erstelle ich meinen Plot:
Code: Alles auswählen
farben=['b', 'g', 'r', 'c', 'm', 'y', 'k', 'orange', 'purple', 'saddlebrown']
ax1=ax2=ax3=ax4=ax5=ax6=ax7=ax8=ax9=ax10=0
var=[ax1,ax2,ax3,ax4,ax5,ax6,ax7]
subplots=[]
y_max = 0
y_min = 0
for i in range(0,anzahl_plot):
subplots.append(var[i])
for i in range(0,anzahl_plot):
if(max(spalten[y_achse[i]])>y_max):
y_max = max(spalten[y_achse[i]])
subplots[0] = object.MplWidget.canvas.axes = object.MplWidget.canvas.figure.add_subplot(111)
object.MplWidget.canvas.axes.plot(spalten[x_achse[0]],spalten[y_achse[0]], label = spalten_namen[1], color = farben[0])
subplots[0].set_ylim(y_min,y_max)
for i in range(1,anzahl_plot):
subplots[i]=subplots[0].twinx()#x-achse wird geteilt und neue y-achse wird erzeugt
subplots[i] = object.MplWidget.canvas.axes.plot(spalten[x_achse[i]],spalten[y_achse[i]], label = spalten_namen[i+1], color = farben[i])
object.MplWidget.canvas.axes.legend(loc='upper right')
object.MplWidget.canvas.draw()
Code: Alles auswählen
def on_press(key):
linien = window.MplWidget.canvas.figure.get_axes()
if(window.radioButton_Ch1.isChecked()):
x=0
elif(window.radioButton_Ch2.isChecked()):
x=1
elif(window.radioButton_Ch3.isChecked()):
x=2
elif(window.radioButton_Ch4.isChecked()):
x=3
elif(window.radioButton_Ch5.isChecked()):
x=4
elif(window.radioButton_Ch6.isChecked()):
x=5
elif(window.radioButton_Ch7.isChecked()):
x=6
elif(window.radioButton_Ch8.isChecked()):
x=7
window.MplWidget.canvas.axes = linien[x]
delta = max(window.MplWidget.canvas.axes.get_xlim()) - min(window.MplWidget.canvas.axes.get_xlim())
step = delta/10
pos_min, pos_max = window.MplWidget.canvas.axes.get_xlim()
delta_y = max(window.MplWidget.canvas.axes.get_ylim()) - min(window.MplWidget.canvas.axes.get_ylim())
step_y = delta_y/10
pos_min_y, pos_max_y = window.MplWidget.canvas.axes.get_ylim()
if(key == Key.f1):
cur_ylim = window.MplWidget.canvas.axes.get_ylim()
print(cur_ylim)
scale_factor = 1/1.1
new_height = (cur_ylim[1] - cur_ylim[0]) * scale_factor
ydata = (cur_ylim[1] - cur_ylim[0])/2
rely = (cur_ylim[1] - ydata)/(cur_ylim[1] - cur_ylim[0])
window.MplWidget.canvas.axes.set_ylim([ydata - new_height * (1-rely), ydata + new_height * (rely)])
window.MplWidget.canvas.draw_idle()
if(key == Key.f2)
cur_ylim = window.MplWidget.canvas.axes.get_ylim()
scale_factor = 1.1
new_height = (cur_ylim[1] - cur_ylim[0]) * scale_factor
ydata = (cur_ylim[1] - cur_ylim[0])/2
rely = (cur_ylim[1] - ydata)/(cur_ylim[1] - cur_ylim[0])
window.MplWidget.canvas.axes.set_ylim([ydata - new_height * (1-rely), ydata + new_height * (rely)])
window.MplWidget.canvas.draw()