加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

如何在推文里让你的曲线动起来?

2020/02/13
156
阅读需 11 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

关于动图的制作方法,在公众号里大家输入动图? 便可以查询到原来的说明。

推文中的动图是通过数据采集系统,包括可以读取数值的数字万用表数字示波器、数字频谱仪以及特制的数据采集板卡等来采集。然后通过 python 语言绘制产生相应的动图。动图的风格包括以下两种:

(1)动态信号波形

仿照示波器显示波形的形式,将连续采集到的数据动态展示出来,反映了信号的变化特点。

动态信号波形图

(2)逐步增多数据曲线

将采集到的数据从少到多绘制成逐步压缩的曲线,可以展示数据发展的趋势规律。

动态数据曲线

绘制动图方法

以上两种方式主要是借助于两组命令分成两步形成 GIF 动图。

第一步 绘制曲线,存储图片

绘制曲线使用 matplotlib 中的 plot 命令完成。根据需要绘制的风格,可以选择按照一帧一帧地逐帧绘制,也可选择按照从少到多的绘制方式。

下面的代码片段显示了绘制一组频率变化的正弦曲线的图像,并将它们逐帧存储在指定目录中,文件名称从 0.jpg,变化到 49.jpg。这是制作动图的第一步。

import matplotlib.pyplot as plt

omiga = linspace(1, 5, 50)

t = linspace(0, 20, 200)

count=0

for o in omiga:

    sint = sin(t * o)

    
    plt.clf()

    plt.plot(t, sint, label='Sinusoidal Curve')

    plt.xlabel('Time (s)')

    plt.ylabel('Amplitude (V)')

    plt.grid(True)

    plt.savefig(r'd:\temp\%d.jgp'%count)

    count = count+1

根据 matplotlib 中的说明,存储图频的格式不包括 BMP 格式。可以生成 JPG 或者其他类型的图片。

生成频谱动态增加的曲线

第二步 生成动图文件

有了逐帧图片,现在有很多独立的程序,或者在线的网站可以提供转换成 GIF 片的功能。其中一个小巧但功能比较强的软件工具是:movgear.exe 软件。它不仅可以将一组单张图图频转换成 GIF 图片,也可以完成相应的编辑功能。

也存在很多 python 软件包可以帮助生成 GIF 图片,其中一个比较简便的就是是踹死 PIL 中的 Image 对象,在调用 save()命令的时候生成 GIF 文件。在生成的同时可以指明每个图片显示的时间长度。

下面的代码片段显示了应用 Image 将输入的一组文件名称所对应的图频转换成 GIF 文件的过程。

from PIL import Image

#------------------------------------------------------------

def filedim2gif(giffile=r'd:\temp\1.gif', filedim=[], period=50, last=50):

    if len(filedim) ==0: return 0

    imageDim = []

    for f in filedim:

        imageDim.append(Image.open(os.path.join(filedir, f)))

    duration = period[](imageDim "period")

    duration[-1] = last

    imageDim[0].save(giffile,\

                     save_all=True,\

                     append_images=imageDim[1:],\

                     duration=duration,

                     loop=False)

    printf('Save GIF: %s'%giffile)

    return 0

完整的程序

下面是定义了一个 PlotGIF 类来帮助存储 plt 对象中的文件以及最后生成 GIF 图片。其中在初始化的时候指明一个临时的目录来存储 PLOT 存储的 JPG 文件。使用 append()命令来添加每一次 plt 调用 savefig 所产生的文件。最后使用 save() 命令生成最终的 GIF 文件。

#------------------------------------------------------------

# TSDRAW.PY

#------------------------------------------------------------

from tsmodule.tspdata   import *

from PIL import Image

#------------------------------------------------------------

class PlotGIF(object):

    def __init__(self, gifdir=r'd:\temp\GIF'):

        self.gifdir = gifdir

        self.imageDim = []

        self.count = 0

        if os.path.isdir(gifdir) == False:

            os.mkdir(gifdir)

    def infor(self, ):

        printf(self.gifdir, self.count)

    def __str__(self, ):

        return 'gifdir:%s'%self.dir

    def append(self, plt):

        filename = os.path.join(self.gifdir, '%04d.jpg'%self.count)

        self.count = self.count + 1

        plt.savefig(filename)

        self.imageDim.append(Image.open(filename))

        
    def save(self, giffile, period=100, last=100):

        duration = period[](self.imageDim "period")

        duration[-1] = last

        self.imageDim[0].save(giffile,\

                              save_all=True,\

                              append_images=self.imageDim[1:],\

                              duration=duration,

                              loop=False)

        self.imageDim = []

        self.count = 0

        printf('Save GIF:%s'%giffile)

减少动图文件大小

如果是在微信公众号中使用 GIF 文件,它有两个限制,一个是文件的大小不超过 5 MBytes。第二个限制是动图中包含的图片不超过 300 张。

如果文件的大小超过了 5 M 字节怎么办?

一方面可以在使用 plt 时,每张图片的大小尽量减小。另外一方面可以使用 movgear 软件 对 GIF 文件进行差分存储。这种模式是将 GIF 图片中每相邻的两张图片相减,存储时将变化量按照游程无损编码方式完成压缩存储。如果动图相邻两张图片非常相似,这种差分之后的存储就非常有效果。对于不复杂的 plt 的图片使用差分存储可以很轻松获得 5 倍以上的压缩效果。

movgear 压缩 GIF 文件

 

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
MCF5282CVM66 1 Freescale Semiconductor MCF5282 V2CORE 512KFLASH
$40.57 查看
ATXMEGA256A3U-MHR 1 Microchip Technology Inc IC MCU 8BIT 256KB FLASH 64QFN
$13.36 查看
ATXMEGA64A4U-MH 1 Atmel Corporation RISC Microcontroller, 16-Bit, FLASH, AVR RISC CPU, 32MHz, CMOS, PQCC44, 7 X 7 MM, 1 MM HEIGHT, 0.50 MM PITCH, GREEN, PLASTIC, MO-220VKKD-3, VQFN-44
$4.89 查看

相关推荐

电子产业图谱

公众号TsinghuaJoking主笔。清华大学自动化系教师,研究兴趣范围包括自动控制、智能信息处理、嵌入式电子系统等。全国大学生智能汽车竞赛秘书处主任,技术组组长,网称“卓大大”。

TA的热门作品
查看更多