40499


python3.5を使っています。pyqt5でmatplotlibを使ってグラフを書きたいです。しかし、一つのキャンパス内に複数のグラフを書くことができません。イメージとしてはplotボタンを押した時にsin関数とcos関数の二つが一つのグラフ内に重なって表示されるの様に、下のコードに書いたつもりです。しかし、後から書いたcos関数のみが表示されてしまいます。

[code]

    import sys
    from PyQt5 import QtWidgets
    
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
    import matplotlib.pyplot as plt
    
    import random
    import numpy as np
    
    
    class Window(QtWidgets.QDialog):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.setWindowTitle("グラフ")
            self.setGeometry(300,300,500,500)
    
            self.figure = plt.figure()
            self.axes = self.figure.add_subplot(111)
            # We want the axes cleared every time plot() is called
            self.axes.hold(False)
            self.canvas = FigureCanvas(self.figure)
            self.canvas.move(0,0)
    
    
            self.toolbar = NavigationToolbar(self.canvas, self)
            #self.toolbar.hide()
    
            # Just some button 
            self.button1 = QtWidgets.QPushButton('Plot',self)
            self.button1.clicked.connect(self.plot)
    
            layout = QtWidgets.QVBoxLayout()
            layout.addWidget(self.toolbar)
            layout.addWidget(self.canvas)
    
            btnlayout = QtWidgets.QHBoxLayout()
            btnlayout.addWidget(self.button1)
            qw = QtWidgets.QWidget(self)
            qw.setLayout(btnlayout)
            layout.addWidget(qw)
    
            self.setLayout(layout)
    
        def plot(self):
            x1=np.arange(0, 4*np.pi, 0.1)
            y1=np.sin(x1)
            self.axes.plot(x1,y1,c="r",label="sin")
            self.axes.legend(loc="best")
            self.canvas.draw()
    
            x2=np.arange(0, 4*np.pi, 0.1)
            y2=np.cos(x2)
            self.axes.plot(x2,y2,c="b",label="cos")
            self.axes.legend(loc="best")
            self.canvas.draw()        
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
    
        main = Window()
        main.setWindowTitle('Simple QTpy and MatplotLib example with Zoom/Pan')
        main.show()
    
        sys.exit(app.exec_())
    
[/code]


CC BY-SA 3.0
2017-12-22T13:46:29.603
40483
2021-03-09T04:55:13.697
2021-03-09T04:55:13.697
26529
26529
question
python pyqt5
pyqt5でmatplotlibを使ってグラフを書きたいが、一つのキャンパスに複数のグラフを書けない

[code]

    self.axes.hold(False)
    
[/code]

を消したらできました。


CC BY-SA 3.0
2017-12-23T13:49:25.997
40499
2017-12-23T13:49:25.997
26529
40483
answer