【问题标题】:Generating live-plot using matplotlib and pyqt5使用 matplotlib 和 pyqt5 生成实时图
【发布时间】:2021-09-17 01:47:14
【问题描述】:

我想使用 matplotlib 和 pyqt5 创建一个实时绘图,但如果我没记错的话,由于 FuncAnimation 模块的第一个参数,它会给出一个错误,我不知道在这里写什么.我愿意接受有关代码的任何建议。

代码如下:

第一部分:

from PyQt5.QtWidgets import*

from matplotlib.backends.backend_qt5agg import FigureCanvas

from matplotlib.figure import Figure   

class MplWidget(QWidget):   
    def __init__(self, parent = None):

        QWidget.__init__(self, parent)
        
        self.canvas = FigureCanvas(Figure())
        
        vertical_layout = QVBoxLayout()
        vertical_layout.addWidget(self.canvas)
        
        self.canvas.axes = self.canvas.figure.add_subplot(111)
        self.setLayout(vertical_layout)

第二部分:

from PyQt5.QtWidgets import*

from PyQt5.uic import loadUi

from matplotlib.backends.backend_qt5agg import (NavigationToolbar2QT as NavigationToolbar)

import numpy as np

import random

import random

from itertools import count

import pandas as pd

import matplotlib.pyplot as plt

from matplotlib.animation import FuncAnimation

x_vals = []
y_vals = []

index = count()
     
class MatplotlibWidget(QMainWindow):
    
    def __init__(self):
        
        QMainWindow.__init__(self)

        loadUi("livegraph.ui",self)

        self.setWindowTitle("PyQt5 Graph")

        self.update_graph()

        self.addToolBar(NavigationToolbar(self.MplWidget.canvas, self))


    def update_graph(self):
        self.ani = FuncAnimation(self.MplWidget.canvas, self.animate, interval=1000)
        self.show()
        
    def animate(self,i):
        data = pd.read_csv('data.csv')
        x = data['x_value']
        y1 = data['total_1']
        y2 = data['total_2']

        plt.cla()
        self.MplWidget.canvas.axes.clear()
        self.MplWidget.canvas.axes.plot(x, y1, label='Altitude')
        self.MplWidget.canvas.axes.plot(x, y2, label='Velocity')
        self.MplWidget.canvas.axes.set_title('Time-Velocity/Altitude')
        self.MplWidget.canvas.axes.legend(loc='upper right')
 
        
        


app = QApplication([])

window = MatplotlibWidget()

window.show()

app.exec_()

错误部分如下

Traceback (most recent call last):

  File "C:\Users\slalo\Desktop\livegraph\newmain.py", line 63, in <module>
    window = MatplotlibWidget()

  File "C:\Users\slalo\Desktop\livegraph\newmain.py", line 36, in __init__
    self.update_graph()

  File "C:\Users\slalo\Desktop\livegraph\newmain.py", line 42, in update_graph
    self.ani = FuncAnimation(self.MplWidget.canvas, self.animate, interval=1000)

  File "C:\Users\slalo\anaconda3\lib\site-packages\matplotlib\animation.py", line 1656, in __init__
    TimedAnimation.__init__(self, fig, **kwargs)

  File "C:\Users\slalo\anaconda3\lib\site-packages\matplotlib\animation.py", line 1414, in __init__
    event_source = fig.canvas.new_timer(interval=self._interval)

AttributeError: 'FigureCanvasQTAgg' object has no attribute 'canvas'

【问题讨论】:

    标签: python python-3.x matplotlib pyqt5


    【解决方案1】:

    FuncAnimation 的第一个参数期望画布的图形,它不期望画布。解决办法是改成:

    self.ani = FuncAnimation(
        self.MplWidget.canvas.figure, self.animate, interval=1000
    )
    

    【讨论】:

    • 非常感谢。真的很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2012-09-27
    • 2018-06-23
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多