I have a problem with FuncAnimation. My problem is that the animation works, but the axes of the plot won't show anymore.
If I comment the animation part in the code out it will show the plot with the axes.
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,
So I don't know why this happens and how I can solve it.
Full code underneath.
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())
question from:
https://stackoverflow.com/questions/65862229/the-axes-of-the-plot-wont-show-when-start-funcanimation