簡體   English   中英

使用 matplotlib 和 pyqt5 生成實時繪圖

[英]Generating live-plot using matplotlib and pyqt5

我想使用 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'

FuncAnimation 的第一個參數期望畫布的 Figure,它不期望畫布。 解決辦法是改成:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM