matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解

下面是关于“matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解”的完整攻略:

1. matplotlib 画动态图简介

Matplotlib 是 Python 语言中广泛使用的数据可视化库之一,主要用于绘制静态图表。但是在某些情况下,我们需要绘制一些动态图,如实时地展示传感器的采集数据等。这时候,Matplotlib 就需要使用到其动态图绘制功能。

Matplotlib 的动态图绘制功能可以使用 FuncAnimation 函数来实现。其主要原理为,在绘制动态图时,通过一系列帧(frames)来实现动态变化,每一帧都是一张静态图像,多个帧连续展示就实现了动态效果。

2. plt.ion()和plt.ioff()的作用

在使用 Matplotlib 进行动态图绘制时,为了让静态图像显示出来,需要手动的使用 plt.show() 函数。但是,如果我们每次绘制完一个新的帧后都调用该函数,则非常耗费时间,并且会使绘图界面出现严重的卡顿。这时候,我们需要使用 plt.ion() 和 plt.ioff() 函数,并结合 Matplotlib 的对象-oriented 绘图方法,来切换动态绘图模式和静态绘图模式。

  • plt.ion()

当我们调用 plt.ion() 后,Matplotlib 便会进入动态绘图模式。在该模式下,每执行一次绘图时,都不需要调用 show(),图片会自动更新。这种绘图方式通常用于实时数据处理和绘制动态数据图表等,具有实时性。

  • plt.ioff()

当我们调用 plt.ioff() 后,Matplotlib 便会进入静态绘图模式。在该模式下,Matplotlib 不会自动更新图片,而需要手动使用 plt.show() 函数进行显示,这种绘图方式主要用于静态数据展示和打印出来的图形。

3. plt.ion() 与 plt.ioff() 的使用示例

下面我们分别通过两个示例来演示 plt.ion() 和 plt.ioff() 的使用方法:

示例1:动态绘制正弦曲线

import numpy as np
import matplotlib.pyplot as plt

# 设置绘图模式为动态模式
plt.ion()

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 200)
for i in range(200):
    y = np.sin(x + i / 10.0)
    # 清除上一次的曲线
    ax.clear()
    # 绘制新的曲线
    ax.plot(x, y)
    # 刷新画布
    plt.draw()
    # 暂停一段时间
    plt.pause(0.1)

# 设置绘图模式为静态模式
plt.ioff()

# 显示图形
plt.show()

该示例中,我们利用 Matplotlib 绘制了一条随时间变化的正弦曲线。在绘制正弦曲线时,我们先调用 plt.ion() 函数将 Matplotlib 切换到动态绘图模式,然后通过 for 循环实现一帧一帧的绘制,清除上一帧的曲线,绘制新的曲线,刷新画布,并暂停 0.1 秒,循环下一帧的绘制。最后,我们调用 plt.ioff() 将 Matplotlib 切换为静态绘图模式,最终显示绘制出来的正弦曲线。

示例2:实时展示传感器数据

import serial
import numpy as np
import matplotlib.pyplot as plt

# 打开串口
ser = serial.Serial('COM3', 115200, timeout=0.5)

# 设置绘图模式为动态模式
plt.ion()
fig, ax = plt.subplots()
x = np.linspace(0, 50, 100)
y = np.zeros_like(x)

while True:
    # 读取串口数据
    data = ser.readline()
    try:
        # 将数据转换为浮点数
        value = float(data.decode('utf-8').rstrip())
        # 移动数据数组
        y[1:] = y[:-1]
        # 将新数据添加到数组末尾
        y[0] = value
        # 清除上一次图像
        ax.clear()
        # 绘制新图像
        ax.plot(x, y)
        # 刷新画布
        plt.draw()
        # 暂停一段时间
        plt.pause(0.1)
    except ValueError:
        pass

# 关闭串口
ser.close()

# 设置绘图模式为静态模式
plt.ioff()

# 显示图形
plt.show()

该示例中,我们通过使用 pyserial 库向串口发送数据,并使用 Matplotlib 实时展示传感器的数据。在该程序中,我们先调用 plt.ion() 函数将 Matplotlib 切换到动态绘图模式,然后通过一个 while 循环不断的读取串口数据,并清除上一次数据的图像,绘制新的图像,并刷新画布。最后,我们调用 plt.ioff() 将 Matplotlib 切换为静态绘图模式,最终显示绘制出来的实时数据图表。

以上就是关于“matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解”的完整攻略。希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解 - Python技术站

(1)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python实现读取Linux系统的CPU以及内存占用

    下面是针对“Python实现读取Linux系统的CPU以及内存占用”的完整攻略,主要分为以下几个步骤: 安装psutil模块 psutil模块是一个Python的跨平台系统信息工具,它可以用来获取系统信息、进程信息、CPU和内存占用等。可以使用pip安装,命令如下: pip install psutil 读取CPU占用率 要读取CPU占用率,可以使用psut…

    python 2023年5月30日
    00
  • Python 给下载文件显示进度条和下载时间的实现

    使用urllib库下载文件并显示进度条和下载时间 首先,我们需要导入必要的库:urllib.request、tqdm、time。 import urllib.request from tqdm import tqdm import time 然后,我们定义一个函数来下载文件。这个函数需要传入两个参数:文件的url和保存路径。 def download_fil…

    python 2023年6月2日
    00
  • Python3 实现随机生成一组不重复数并按行写入文件

    下面是Python3 实现随机生成一组不重复数并按行写入文件的完整攻略: 1. 随机生成不重复数 首先,我们需要想办法随机生成不重复数。可以使用Python内置的random模块中的sample方法来实现。该方法的参数是一个集合和一个整数n,返回一个长度为n的新集合,其中元素取自原集合,且不重复。 以下是一个使用sample方法生成10个不重复数的示例代码:…

    python 2023年6月3日
    00
  • MySQL计划任务(事件调度器) Event Scheduler介绍

    MySQL计划任务(事件调度器) Event Scheduler介绍 MySQL事件调度器(Event Scheduler)是MySQL服务器内置的计划任务系统,能够周期性的执行一些预定的任务,例如备份、聚合统计数据、定时清理等。 Event Scheduler的启用 默认情况下,MySQL服务器是没有启用事件调度器的。在MySQL 5.1之前的版本中需要手…

    python 2023年6月13日
    00
  • Python学习之集合的常用方法总结

    以下是“Python学习之集合的常用方法总结”的完整攻略。 1. 集合的常用方法 在Python中,集合是一种无序、不重复的数据类型。集合中元素必须不可变的,例如数字、字符串、元组。下面介绍几个常用的集合方法。 1.1 add方法 add()方法用于向集合中添加元素。示例如下: my_set = {1, 2, 3} my_set.add(4) print(m…

    python 2023年5月13日
    00
  • python删除列表中特定元素的几种方法

    当我们需要从Python列表中删除特定元素时,有多种方法可以实现。下面将介绍Python删除列表中特定元素的几种方法,包括使用remove()方法、列表推导式、使用filter()函数等。 使用remove()方法删除特定元素 remove()方法可以删除列表中特定的元素。例如: # 使用remove()方法删除特定元素 lst = [1, 2, 3, 4,…

    python 2023年5月13日
    00
  • 浅谈Python中re.match()和re.search()的使用及区别

    下面是详细讲解“浅谈Python中re.match()和re.search()的使用及区别”的完整攻略。 1. 总体介绍 正则表达式是一个十分强大的工具,它能在处理文本数据时极大地提高效率。Python中提供了re模块来支持正则表达式操作,其中包括re.match()和re.search()两个方法。这两个方法非常相似,都用来在字符串中查找模式,但是区别在于…

    python 2023年5月13日
    00
  • Python利用hashlib实现文件MD5码的批量存储

    下面是详细讲解“Python利用hashlib实现文件MD5码的批量存储”的完整攻略。其中,我们将以计算多个文件的MD5值为例进行说明。 1. 简介 Python中的hashlib模块提供了一组加密算法的模板,用于安全地加密和哈希数据。在计算文件MD5值时,我们可以通过使用hashlib模块计算文件的哈希值来得到文件的MD5码。本文将结合示例示范如何使用Py…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部