动态刷新matplotlib图片

用matplotlib动态刷新曲线折线图

动态展示折线图,每0.02秒刷新一次数据,动态展示图片

# file name: plot.py
# author: yue
# datetime: 2022/6/4 14:29
from time import sleep
from threading import Thread
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button


# 自定义类,用来封装两个按钮的单击事件处理函数
class ButtonHandler:
    def __init__(self):
        self.flag = True
        self.range_s, self.range_e, self.range_step = 0, 1, 0.005

    # 线程函数,用来更新数据并重新绘制图形
    def threadStart(self):
        while self.flag:
            sleep(0.02)
            self.range_s += self.range_step
            self.range_e += self.range_step
            t = np.arange(self.range_s, self.range_e, self.range_step)
            ydata = np.sin(4 * np.pi * t)
            # 更新数据
            l.set_xdata(t - t[0])
            l.set_ydata(ydata)
            # 重新绘制图形
            plt.draw()

    def Start(self, event):
        print('click start!')
        self.flag = True
        # 创建并启动新线程
        t_ = Thread(target=self.threadStart)
        t_.start()

    def Stop(self, event):
        self.flag = False


if __name__ == '__main__':
    fig, ax = plt.subplots()
    # 设置图形显示位置
    plt.subplots_adjust(bottom=0.2)
    # 实验数据
    range_start, range_end, range_step = 0, 1, 0.005
    t = np.arange(range_start, range_end, range_step)
    s = np.sin(4 * np.pi * t)
    l, = plt.plot(t, s, lw=2)

    callback = ButtonHandler()
    # 创建按钮并设置单击事件处理函数
    axprev = plt.axes([0.81, 0.05, 0.1, 0.075])
    bprev = Button(axprev, 'Stop')
    bprev.on_clicked(callback.Stop)
    axnext = plt.axes([0.7, 0.05, 0.1, 0.075])
    bnext = Button(axnext, 'Start')
    bnext.on_clicked(callback.Start)
    plt.show()

效果图
在这里插入图片描述
⚠️注意:运行这个文件,最好不要在PyCharm 中点击run来运行,因为PyCharm展示的是png图片,无法点击Start按钮。
请直接在终端运行: python plot.py

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
matplotlib是一个功能强大的数据可视化库,也可以实现动态刷新的效果。在matplotlib中,可以通过不断地更新图形对象的属性来实现动态刷新。 首先,需要导入相关的库和模块,包括matplotlib库和animation模块: ```python import matplotlib.pyplot as plt from matplotlib import animation ``` 然后,创建一个用于动态刷新的函数,该函数每次被调用时会更新图形对象的属性。在函数中,可以通过修改图形对象的属性来实现动态更新的效果,例如更新线条的数据或者更新柱状图的高度。下面是一个示例函数,每次调用时会更新一个散点图的数据: ```python def update_scatter(frame): # 更新散点图的数据 ax.clear() ax.scatter(data[frame][:, 0], data[frame][:, 1]) ``` 接下来,创建一个图形窗口和坐标轴对象,并将其传递给动态刷新函数。可以使用`FuncAnimation`函数来创建一个动画对象,其中包括要刷新的图形对象和动态刷新的函数。下面是一个示例代码: ```python fig, ax = plt.subplots() ani = animation.FuncAnimation(fig, update_scatter, frames=len(data), interval=100) ``` 最后,调用`plt.show()`函数来显示动态刷新的图形。完整的代码如下: ```python import matplotlib.pyplot as plt from matplotlib import animation def update_scatter(frame): # 更新散点图的数据 ax.clear() ax.scatter(data[frame][:, 0], data[frame][:, 1]) fig, ax = plt.subplots() ani = animation.FuncAnimation(fig, update_scatter, frames=len(data), interval=100) plt.show() ``` 在上述代码中,`frames`参数用于指定要刷新的帧数,`interval`参数用于指定每次刷新之间的时间间隔(单位为毫秒)。 通过上述方法,我们可以利用matplotlib实现动态刷新的效果,使我们能够实时观察数据的变化和动态过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

企鹅宝儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值