zweite line im matplotlibwidget geht nicht

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
felopy
User
Beiträge: 17
Registriert: Mittwoch 3. Juni 2015, 08:55

Hallo,

ich habe ein PyQT programm mit einem 3d und 2d Plot.
ich plotte zu anfang jeweils einen davon und ändere dann live die plots über set_xdata, set_ydata (zweitfrage, wie mache ich das, würde ich scatter anstatt plot nehmen?)
zusätzlich plotte ich jeweils einen zusätzlichen Plot, was aber nur bei dem 3D plot funktioniert. Der 2D plot zeigt immer nur den am letztens geplotteten Plot an.

Ich musste etwas rumwurtschtel, da ich mich mit QT noch nicht so gut auskenne.
line0 wird verändert, line1 wird neugeplottet (sowohl bei 3d, als auch bei 2d)

Im 3D Plot habe ich zwei lines, weshalb auch alles funktionert.
self.live3d.axes.lines[0] (angeknüpft an Zweitfrage, was wäre das line equivalent bei scatter?)
self.live3d.axes.lines[1]

Im 2D Plot habe ich nur eine Line, was Ursache des Fehlers ist.
self.live3d.axes.lines[0]
self.live3d.axes.lines[1] <<<<<<<NICHT VORHANDEN..

Ich vermute ich habe die Achsen nicht richtig initialisiert, finde aber leider keine Lösung.

Hier mein Code, verkürzt:

Code: Alles auswählen

class ExampleApp(QtGui.QMainWindow, main_ui.Ui_MainWindow):
    def __init__(self, parent=None):
        pyqtgraph.setConfigOption('background', 'w') #before loading widget
        super(ExampleApp, self).__init__(parent)
        self.setupUi(self)

        self.live3d.axes = Axes3D(self.live3d.axes.get_figure())
        '''
        ICH VERMUTE STARK ICH BRAUCHE SOWAS AUCH FÜR 2D.. KRIEGE ES ABEr NICHT RAUS WIE....
        '''
        self.line3d, = self.live3d.axes.plot(data[0], data[1], data[2] , marker = "o", lw = "0", markersize = 5)          
        self.line2d, = self.live2d.axes.plot(data[0], data[1], marker = "o", lw = "0", markersize = 5)

 def update_data(self):     
    	
	xyz_latest und data wird hievor natürlich definiert..
	
        self.live3d.axes.plot(x_latest, y_latest, z_latest, marker = "o", color = "red", markersize = 10, lw = "0", alpha = 0.7)  
        self.live2d.axes.plot(x_latest, y_latest, marker = "o", color = "red", markersize = 10, lw = "0", alpha = 0.7, lw = "0", markersize = 5)  
       
        if self.checkBox_live2d.isChecked():
            self.plot_live2d()
        if self.checkBox_live3d.isChecked():           
            self.plot_live3d() 
            
        latest3d = self.live3d.axes.lines[1]
        latest3d.remove()
        
        latest2d = self.live2d.axes.lines[1] <<<<<<<<<<NICHT VORHANDEN
        latest2d.remove()
        
        QtCore.QTimer.singleShot(100, self.update_data)  
        
 def plot_live3d(self):

        self.update_line(len(data[0]), data, self.line3d)
        self.live3d.draw()
        self.live3d.flush_events()

def plot_live2d(self):
 
        self.live2d.axes.lines[0].set_xdata(data[0])
        self.live2d.axes.lines[0].set_ydata(data[1])
        self.live2d.draw()      
        self.live2d.flush_events()     

if __name__=="__main__":
    app = QtGui.QApplication(sys.argv)
    form = ExampleApp()
    form.show()
    app.exec_()
    print("DONE")
Wäre echt super, würde mir jemand helfen.


Noch eine Frage. Ist es möglich das Alpha der Punkte nach Stelle in Liste anzupassen (und zwar über die functionen plot_live3d und plot_live2d, weil neuplotten es langsamer macht)? Also das der älteste Punkt am durchsichtigsten ist und der jügste Alpha = 1 hat.
Zuletzt geändert von Anonymous am Donnerstag 2. März 2017, 14:40, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Antworten