Matplotlib动画不会在类内更新

8e2ybdfx  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(88)

我正在编写一个简单的类来实时绘制传感器值;但是,动画不会在类中运行。
我已经尝试返回动画对象,使其在类外部拥有一个示例,但这不起作用。
据我所知,这与GitHub #1656中提出的问题相同

import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from random import random

class Animate:

    def __init__(self, sensor):
        # Create figure for plotting
        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(1, 1, 1)
        self.xs = []
        self.ys = []
        self.ylabel = sensor
        self.readings = 20

    # This function is called periodically from FuncAnimation
    def _update(self, i, xs, ys):

        # Get sensor value
        value = random()

        # Add x and y to lists
        self.xs.append(dt.datetime.now().strftime('%H:%M:%S.%f'))
        self.ys.append(value)

        # Limit x and y lists to 20 items
        self.xs = self.xs[-self.readings:]
        self.ys = self.ys[-self.readings:]

        # Draw x and y lists
        self.ax.clear()
        self.ax.plot(xs, ys)

        # Format plot
        plt.xticks(rotation=45, ha='right')
        plt.subplots_adjust(bottom=0.30)
        plt.title(self.ylabel + ' over Time')
        plt.ylabel(self.ylabel)

    def start(self):
        print('Starting')
        # Set up plot to call animate() function periodically
        self.anim = animation.FuncAnimation(self.fig, self._update, fargs=(self.xs, self.ys), interval=200)
        plt.show();

rand = Animate('Torque')
rand.start();

字符串

qxsslcnc

qxsslcnc1#

变量xsys已经命名为self.xsself.ys,可以在类命名空间中访问;您不需要将它们传递给self.update

import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from random import random

class Animate:

    def __init__(self, sensor):
        # Create figure for plotting
        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(1, 1, 1)
        self.xs = []
        self.ys = []
        self.ylabel = sensor
        self.readings = 20

    # This function is called periodically from FuncAnimation
    def _update(self, i):

        # Read temperature (Celsius) from TMP102
        temp_c = random()

        # Add x and y to lists
        self.xs.append(dt.datetime.now().strftime('%H:%M:%S.%f'))
        self.ys.append(temp_c)

        # Limit x and y lists to 20 items
        self.xs = self.xs[-self.readings:]
        self.ys = self.ys[-self.readings:]

        # Draw x and y lists
        self.ax.clear()
        self.ax.plot(self.xs, self.ys)

        # Format plot
        plt.xticks(rotation=45, ha='right')
        plt.subplots_adjust(bottom=0.30)
        plt.title(self.ylabel + ' over Time')
        plt.ylabel(self.ylabel)

    def start(self):
        print('Starting')
        # Set up plot to call animate() function periodically
        self.anim = animation.FuncAnimation(self.fig, self._update, interval=200)
        plt.show()

rand = Animate('Torque')
rand.start()

字符串

相关问题