我想读取数据并绘制动态图,所以我学习了使用PyQt5的matplotlib。我找到了一个例子,但它是针对PyQt4的。我将其修改为PyQt5,但它有一些问题,当我单击开始按钮时,它显示错误
回溯(最后一次调用):文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/backend_base.py”,第1305行,在_on_timer ret=func(*args,**kwargs)文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/animation/animation.py”,第1049行,步进静止=动画_步骤(self,*args)文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/animation.py”,第855行,在步骤self中_绘制下一帧(framedata,self.\blit)文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/animation.py”,第873行,绘制下一帧self_pre_draw(framedata,blit)文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/animation.py”,第886行,在pre_draw self中_blit_clear(自绘制艺术家、自绘制缓存)文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/animation.py”,第926行,在blit_clear a.图中。帆布restore_region(bg_缓存[a])键错误:matplotlib。斧头_子地块。0x1067718d0处的AxesSubplot对象
这是我的密码,有人能帮我吗??
import sys, os, random
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
import numpy as np
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.animation as animation
class MyMplCanvas(FigureCanvas):
"""Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
# We want the axes cleared every time plot() is called
self.axes.hold(False)
self.compute_initial_figure()
#
FigureCanvas.__init__(self, fig)
self.setParent(parent)
def compute_initial_figure(self):
pass
class AnimationWidget(QWidget):
def __init__(self):
QMainWindow.__init__(self)
vbox = QVBoxLayout()
self.canvas = MyMplCanvas(self, width=5, height=4, dpi=100)
vbox.addWidget(self.canvas)
hbox = QHBoxLayout()
self.start_button = QPushButton("start", self)
self.stop_button = QPushButton("stop", self)
self.start_button.clicked.connect(self.on_start)
self.stop_button.clicked.connect(self.on_stop)
hbox.addWidget(self.start_button)
hbox.addWidget(self.stop_button)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.x = np.linspace(0, 5*np.pi, 400)
self.p = 0.0
self.y = np.sin(self.x + self.p)
self.line, = self.canvas.axes.plot(self.x, self.y, animated=True, lw=2)
def update_line(self, i):
self.p += 0.1
y = np.sin(self.x + self.p)
self.line.set_ydata(y)
return [self.line]
def on_start(self):
self.ani = animation.FuncAnimation(self.canvas.figure, self.update_line,
blit=True, interval=25)
def on_stop(self):
self.ani._stop()
if __name__ == "__main__":
qApp = QApplication(sys.argv)
aw = AnimationWidget()
aw.show()
sys.exit(qApp.exec_())
我尝试了你的代码,似乎唯一真正的问题发生在你点击开始两次而没有停止动画的时候。
解决这个问题的一个方法(不涉及动画情节的细节)是防止开始和停止按钮做任何不应该做的事情。
方法是向AnimationWidget
类添加一个属性,该属性记录动画是否正在播放。所以把它放在AnimationWidget
的\uuuu init\uuuu
方法中的某个地方:
self.playing = False
然后,将启动时的和停止时的
方法更改为
def on_start(self):
if self.playing:
pass
else:
self.playing = True
self.ani = animation.FuncAnimation(
self.canvas.figure,
self.update_line,
blit=True, interval=25
)
和
def on_stop(self):
if self.playing:
self.playing = False
self.ani._stop()
else:
pass
这使得动画不会启动两次,并且不会出现错误和图形故障。
本文向大家介绍利用PyQt5+Matplotlib 绘制静态/动态图的实现代码,包括了利用PyQt5+Matplotlib 绘制静态/动态图的实现代码的使用技巧和注意事项,需要的朋友参考一下 代码编辑环境 Win10+(Pycharmm or Vscode)+PyQt 5.14.2 功能实现 静态作图:数据作图,取决于作图函数,可自行修改 动态作图:产生数据,获取并更新数据,最后刷新显示,可用于实
im使用pyqt5创建gui并使用matplotlib 但是当我尝试创建pyInster可执行文件时,它不起作用 我尝试了以下几种解决方案: 1-无法使用PyInstaller创建工作的PyQt5 Python可执行文件/ 2-在PyInstaller,为什么不会NumPy。随机的。作为模块的公共负载? 3-PyInstaller生成的可执行文件中出现Python SSL导入错误 我尝试使用cx\
本文向大家介绍matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解,包括了matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解的使用技巧和注意事项,需要的朋友参考一下 学习python的道路是漫长的,今天又遇到一个问题,所以想写下来自己的理解方便以后查看。 在使用matplotlib的过程中,常常会需要画很多图,但是好像并不能同时展示
numpy.histogram()函数将输入数组和作为两个参数。 bin数组中的连续元素用作每个bin的边界。 Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和数组的数组作为参数,并转换为直方图。
问题内容: 我如何使用java中的jFree图表创建动态折线图,它显示之前2小时的数据,并且还提供一个空白区域,数据从当前时间开始显示2小时。例如,假设当前时间为4pm,那么图表将显示数据从下午2点到下午6点。图表从下午2点到下午4点显示一条线,从下午4点到下午6点提供空白,这是图表移动时的填充时间,表示该图表的尾部从中间开始并向右移动。类似股市图。 问题答案: 是的,您可以做到。几天前我也遇到了
问题内容: 有没有办法直接使用字典中的数据来绘制条形图? 我的字典看起来像这样: 我期待 工作,但事实并非如此。 这是错误: 问题答案: 您可以通过首先绘制条形图然后设置适当的刻度来分两行进行: 请注意,倒数第二行应在python3中读取,因为它会返回一个生成器,而matplotlib无法直接使用该生成器。