[英]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.