- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想读取数据并绘制动态图,所以我用PyQt5学习matplotlib。我找到了示例,但它适用于 PyQt4 there 。我将其修改为PyQt5,但出现了一些问题,当我单击开始按钮时,它显示错误
Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/backend_bases.py", line 1305, in _on_timer ret = func(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py", line 1049, in _step still_going = Animation._step(self, *args) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py", line 855, in _step self._draw_next_frame(framedata, self._blit) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py", line 873, in _draw_next_frame self._pre_draw(framedata, blit) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py", line 886, in _pre_draw self._blit_clear(self._drawn_artists, self._blit_cache) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/animation.py", line 926, in _blit_clear a.figure.canvas.restore_region(bg_cache[a]) KeyError: matplotlib.axes._subplots.AxesSubplot object at 0x1067718d0
这是我的代码,有人可以帮助我吗?
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
的 __init__
方法中的某个位置:
self.playing = False
然后,将 on_start
和 on_stop
方法更改为
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
这使得动画不会启动两次并出现错误和图形故障。
关于python - 使用 PyQt5 和 Matplotlib 制作动态图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40372103/
小问题,我是 JavaScript 的新手,我无疑会从这个项目中学到很多东西。所以我提出一个问题(这很可能是一个愚蠢的问题),我的问题是: 我计划构建一个 Web 应用程序,它可以从 Raphael
我一直在尝试使用 Plotly 执行可视化,但我的问题是我需要它是动态的。意思是如果我有代码: import plotly.express as px data = [1, 5, 4, 7, 5, 2
请帮助..我想制作一个android应用程序,我从数据库中获取值并需要以图形、饼图、条形图等格式显示它们。最好的方法是什么?我能得到一些此类应用程序的示例代码吗? 最佳答案 这里有一些很棒的建议:ht
我是一名优秀的程序员,十分优秀!