我对 FuncAnimation 有疑问。我的问题是动画有效,但情节的轴不再显示。
如果我将代码中的动画部分注释掉,它将显示带有轴的图。
self.line, = self.ax.plot(self.state_x[0], self.state_y[0], '#000000', linewidth=4)
self.anim = FuncAnimation(self.fig, self.update, frames=4, interval=700, blit=True, repeat=True)
def update(self, i):
self.line.set_data([self.state_x[i], self.state_y[i]])
return self.line,
所以我不知道为什么会发生这种情况以及如何解决它。
完整代码如下。
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from PyQt5.QtWidgets import QWidget, QApplication, QRadioButton, QLabel
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QRect, Qt
from matplotlib.animation import FuncAnimation
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
import sys
class Carnot(FigureCanvas):
def __init__(self, parent):
plt.ion()
self.fig = Figure(figsize=(5, 5), dpi=100)
self.ax = self.fig.add_subplot(111)
super().__init__(self.fig)
self.setParent(parent)
self.resize(800, 800)
self.state_x = np.array([(1, 2), (2, 2), (2, 1), (1, 1)])
self.state_y = np.array([(2, 2), (2, 1), (1, 1), (1, 2)])
self.setup()
def setup(self):
state12 = self.ax.plot(self.state_x[0], self.state_y[0], 'r', linewidth=3)
state23 = self.ax.plot(self.state_x[1], self.state_y[1], 'b', linewidth=3)
state34 = self.ax.plot(self.state_x[2], self.state_y[2], 'g', linewidth=3)
state41 = self.ax.plot(self.state_x[3], self.state_y[3], 'y', linewidth=3)
self.ax.set(xlabel="specific entropy s", ylabel="temperature T",
title="Carnot cycle")
self.ax.set_xticks([])
self.ax.set_yticks([])
self.ax.legend(("1 → 2 isothermal expansion", "2 → 3 isentropic expansion", "3 → 4 isothermal compression",
"4 → 1 isentropic compression"))
self.line, = self.ax.plot(self.state_x[0], self.state_y[0], '#000000', linewidth=4)
self.anim = FuncAnimation(self.fig, self.update, frames=4, interval=700, blit=True, repeat=True)
def update(self, i):
self.line.set_data([self.state_x[i], self.state_y[i]])
return self.line,
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.setWindowTitle("Name")
self.resize(1110, 800)
self.label_topic = QLabel("Carnot", self)
self.label_topic.setGeometry(QRect(10, 10, 291, 41))
self.label_topic.setFont(QFont("Arial", 12, QFont.Bold))
self.label_topic.setAlignment(Qt.AlignLeft)
self.radioButton1 = QRadioButton(self) # Carnot
self.radioButton1.setGeometry(QRect(20, 110, 91, 30))
self.radioButton1.setFont(QFont("Arial", 12))
self.radioButton1.setText("Carnot")
self.radioButton1.clicked.connect(self.ShowCarnot)
def ShowCarnot(self):
carnot_process = Carnot(self)
carnot_process.move(310, 0)
carnot_process.show()
App = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(App.exec())