首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用matplotlib和pyqt5生成活图

使用matplotlib和pyqt5生成活图
EN

Stack Overflow用户
提问于 2021-07-06 12:14:42
回答 1查看 186关注 0票数 1

我想用matplotlib和pyqt5创建一个实景图,但是如果我没有弄错的话,它会给出一个错误,因为FuncAnimation模块的第一个参数,而且我无法确切地知道在这里要写什么。我愿意接受关于密码的任何建议。

守则如下:

第一部分:

代码语言:javascript
复制
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)

第二部分:

代码语言:javascript
复制
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_()

错误部分在下面给出

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-06 19:06:21

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

代码语言:javascript
复制
self.ani = FuncAnimation(
    self.MplWidget.canvas.figure, self.animate, interval=1000
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68270358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档