使用python动态生成波形曲线的实现

效果是这个样子的:

用到的模块:

* matplotlib.pyplot
* matplotlib.animation.FuncAnimation
* numpy

三个圆的半径分别为:5, 2, 1。

三个点旋转的角频率分别为:1, 3, 5。

生成固定的圆——基础圆

xdata = np.linspace(0, 2 * np.pi, 50)
fig, ax = plt.subplots(1, 1, figsize=(8, 5))
b_cir = ax.plot(5 * np.cos(xdata), 5 * np.sin(xdata))

# 配置下画布
ax.spines['bottom'].set_visible(False)  # 清除下脊
ax.spines['top'].set_visible(False)    # 清除上脊
ax.spines['left'].set_visible(False)   # 清除左脊
ax.spines['right'].set_visible(False)   # 清除右脊
# 取消刻度和数字标签
ax.tick_params(bottom='off', left='off', labelbottom='off', labelleft='off')

生成第1个移动点

  根据圆上点的坐标公式,更新点的位置:

x = r * cos(w * t) + a
y = r * sin(w * t) + b

def update(frame):
  movX1 = 5 * np.cos(frame * 1)
  movY1 = 5 * np.sin(frame * 1)
  movp1.set_data(movX1, movY1)  # 更新移动点数据
  return movp1,   # 还是得有','
ani = FuncAnimation(fig, update, frames=xdata, blit=True)

生成第1个移动圆

  根据坐标系中任意位置上圆的公式,计算移动的圆。

c_sub1, = ax.plot([], [], animated=True)
# 修改 update 函数生成在基础圆上移动的圆
def update(frame):
  # 计算移动点
  # 计算移动圆
  c_sub1X = 2 * np.cos(xdata) + movX1
  c_sub1Y = 2 * np.sin(xdata) + movY1
  # 更新移动点数据
  c_sub1.set_data(c_sub1X, c_sub1Y)
  return movp1, c_sub1,

生成第2个移动点和移动圆

   生成的方式和前面的类似

movp2, = ax.plot([], [], 'ro', animated=True)
c_sub2, = ax.plot([], [], animated=True)
def update(frame):
# 计算第1个移动点和圆
# 计算第2个移动点和圆
movX2 = movX1 + 2 * np.cos(frame * 3)
movY2 = movY1 + 2 * np.sin(frame * 3)
c_sub2X = 1 * np.cos(xdata) + movX2
c_sub2Y = 1 * np.sin(xdata) + movY2

# 更新第1个移动点和圆
# 更新第2个移动点和圆
movp2.set_data(movX2, movY2)
c_sub2.set_data(c_sub2X, c_sub2Y)
return movp1, c_sub1, movp2, c_sub2,

生成波形曲线

  生成的波形曲线,其实就是3个圆生成的正弦曲线的叠加值:

sineTotal = sine1 + sine2 + sine3

sine, = ax.plot(xdata + 10, np.zeros(50))
def update(frame):
# 计算第1个移动点和圆
# 计算第2个移动点和圆
# 计算波形曲线的 y 值
s = 5 * np.sin((xdata+frame) * 1) + \
  2 * np.sin((xdata+frame) * 3) + \
  1 * np.sin((xdata+frame) * 5)

# 更新第1个移动点和圆
# 更新第2个移动点和圆
# 更新波形曲线
sine.set_ydata(s)
return movp1, c_sub1, movp2, c_sub2, sine,

加条直线指示下

  直线就是,第3个移动圆上的移动点与波形末端的连线。

movp3, = ax.plot([], [], 'ro', animated=True) # 添加第3个圆上的移动点
ln, = ax.plot([], [], animated=True)
def update(frame):
# 计算第1个移动点和圆
# 计算第2个移动点和圆
# 计算波形曲线的 y 值
# 计算第3个移动点
movX3 = movX2 + 1 * np.cos(frame * 5)
movY3 = movY2 + 1 * np.sin(frame * 5)

# 更新第1个移动点和圆
# 更新第2个移动点和圆
# 更新波形曲线
ln.set_data([movX3, 10 + 2 * np.pi], [movY3, movY3])
return movp1, c_sub1, movp2, c_sub2, sine, movp3, ln

保存 gif 动图

ani.save("multiSin.gif", writer='imagemagick', fps=200, dpi=50)

  这里用到“imagemagick”来进行动图的保存。但在使用前需要配置些内容:

1. 安装 imagemagick,下载地址是:http://www.imagemagick.org/script/download.php;

2. 修改matplotlibrc文件进行配置,可通过下面语句查看文件存放路径:

import matplotlib
matplotlib.matplotlib_fname()

  在文件末尾取消“animation.convert_path”的注释;

3. 修改__init__.py文件,打开文件后查找rcParams(),在下一行添加:

rcParams['animation.convert_path'] = '[imagemagick的安装路径]\\ImageMagick-7.0.8-Q16\\magick.exe'

在以前的imagemagick版本,有个文件是convert.exe,新版本这个文件取消了,功能整合到“magick.exe”中了。

修改完成后就可以使用上面的语句生成gif动图了。

以上这篇使用python动态生成波形曲线的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python使用matplotlib绘制Logistic曲线操作示例

    本文实例讲述了Python使用matplotlib绘制Logistic曲线操作.分享给大家供大家参考,具体如下: 标准Logistic函数为: f(x) = 1 / ( 1 + exp(-x) ) 其导函数为: f'(x) = f(x) * ( 1 - f(x) ) 下面使用matplotlib绘制逻辑斯蒂函数及其导函数的曲线. Python代码: # -*- coding:utf-8 -*- #!python3 import numpy as np import matplotlib.pypl

  • Python求正态分布曲线下面积实例

    正态分布应用最广泛的连续概率分布,其特征是"钟"形曲线.这种分布的概率密度函数为: 其中,μ为均值,σ为标准差. 求正态分布曲线下面积有3σ原则: 正态曲线下,横轴区间(μ-σ,μ+σ)内的面积为68.268949%,横轴区间(μ-1.96σ,μ+1.96σ)内的面积为95.449974%,横轴区间(μ-2.58σ,μ+2.58σ)内的面积为99.730020%. 求任意区间内曲线下的面积,通常可以引用scipy包中的相关函数 norm函数生成一个给定均值和标准差的正态分布,cdf(x

  • python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制需要的蝴蝶曲线图. 先看下漂亮的蝴蝶曲线吧. 1.首先我们需要确定蝴蝶曲线的函数表达 2.选择python里面的matplotlib.pyplot作为画图工具 1.首先导入python包 import numpy as np import matplotlib.pyplot as plt 2.设置个

  • python 画函数曲线示例

    如下所示: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi, 100) y1, y2 = np.sin(x), np.cos(x) plt.plot(x, y1) plt.plot(x, y2) plt.title('line chart') plt.xlabel('x') plt.ylabel('y') plt.show() 以上这篇python 画函数曲线示例就是小编分享给大家的全

  • Python绘制二维曲线的日常应用详解

    使用Python绘制出类似Excel或者MATLAB的曲线还是比较容易就能够实现的,需要用到的额外库有两个,numpy和matplotlib.使用这两个模块实现的曲线绘制其实在一定程度上更像是MATLAB的plot功能,不过今天看了一下matplotlib网站上的信息,现在的功能更为强劲了,而且已经支持三维图像的绘制. 模块库的安装非常简单,我使用的Mac,在Mac上用pip进行了两个模块库的安装都十分顺畅.相信其他平台基本上也都这样,如果能够联网,这种安装方式是十分推荐的,确实是简单. 我用P

  • python绘制无向图度分布曲线示例

    如下所示: #Copyright (c)2017, 东北大学软件学院学生 # All rightsreserved #文件名称:a.py # 作 者:孔云 #问题描述:统计图中的每个节点的度,并生成度序列 #问题分析:利用networkx.代码如下: import matplotlib.pyplot as plt #导入科学绘图包 import networkx as nx G=nx.random_graphs.barabasi_albert_graph(1000,3)#生成n=1000,m=3

  • 使用python动态生成波形曲线的实现

    效果是这个样子的: 用到的模块: * matplotlib.pyplot * matplotlib.animation.FuncAnimation * numpy 三个圆的半径分别为:5, 2, 1. 三个点旋转的角频率分别为:1, 3, 5. 生成固定的圆--基础圆 xdata = np.linspace(0, 2 * np.pi, 50) fig, ax = plt.subplots(1, 1, figsize=(8, 5)) b_cir = ax.plot(5 * np.cos(xdata

  • Python动态生成多维数组的方法示例

    本文实例讲述了Python动态生成多维数组的方法.分享给大家供大家参考,具体如下: 多维数组其实就是多个一维数组的嵌套,Python中有原生的list,类似一个动态数组. 所以动态生成多维数组的思想就是在list中动态嵌套添加list. 下面代码生成一个一个3×3×2的三维数组: # coding:utf-8 # 使用Python3中的print函数 from __future__ import print_function arr = [] # 基本思想是在list中动态添加list,每个li

  • python 动态生成变量名以及动态获取变量的变量名方法

    前言 需求: 必须现在需要动态创建16个list,每个list的名字不一样,但是是有规律可循,比如第一个list的名字叫: arriage_list_0=[],第二个叫arriage_list_1=[]--..依次类推,但是我又不想手动的去写16个这样的名字,太累了,而且增加了代码的冗余性,灵活性也不强,所以有没有一种方法是能动态创建list名称的呢?答案是有的!而与之对应,既然要对上面的列表动态操作,肯定是少不了动态去解析list名称.所以下面开始介绍方法. python 动态生成变量名 lo

  • 通过抓取淘宝评论为例讲解Python爬取ajax动态生成的数据(经典)

    在学习python的时候,一定会遇到网站内容是通过 ajax动态请求.异步刷新生成的json数据 的情况,并且通过python使用之前爬取静态网页内容的方式是不可以实现的,所以这篇文章将要讲述如果在python中爬取ajax动态生成的数据. 至于读取静态网页内容的方式,有兴趣的可以查看本文内容. 这里我们以爬取淘宝评论为例子讲解一下如何去做到的. 这里主要分为了四步: 一 获取淘宝评论时,ajax请求链接(url) 二 获取该ajax请求返回的json数据 三 使用python解析json数据

  • Python Django框架url反向解析实现动态生成对应的url链接示例

    本文实例讲述了Python Django框架url反向解析实现动态生成对应的url链接.分享给大家供大家参考,具体如下: url反向解析:根据url路由规则,动态生成对应的url链接 (防止硬编码). url反向解析应用在两个地方:模板中的超链接,视图中的重定向. 项目名/urls.py(项目的url路由配置,url反向解析,取namespace名字): from django.conf.urls import include, url from django.contrib import ad

  • Python之——生成动态路由轨迹图的实例

    一.scapy简介与安装 scapy(http://www.secdev.org/projects/scapy/)是一个强大的交互式数据包处理程序,它能够对数据包进行伪造或解包,包括发送数据包.包嗅探.应答和反馈匹配等功能.可以用在处理网络扫描.路由跟踪.服务探测.单元测试等方面,本节主要针对scapy的路由跟踪功能,实现TCP协议方式对服务可用性的探测,比如常用的80(HTTP)与443(HTTPS)服务,并生成美观的路由线路图报表,让管理员清晰了解探测点到目标主机的服务状态.骨干路由节点所处

  • Python+NumPy绘制常见曲线的方法详解

    目录 一.利萨茹曲线 二.计算斐波那契数列 三.方波 四.锯齿波和三角波 在NumPy中,所有的标准三角函数如sin.cos.tan等均有对应的通用函数. 一.利萨茹曲线 (Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波器上显示出利萨茹曲线).利萨茹曲线由以下参数方程定义: x = A sin(at + n/2) y = B sin(bt) 利萨茹曲线的参数包括 A . B . a 和 b .为简单起见,我们令 A 和 B 均为1,设置的参数为 a=9 , b=

  • Python3实现抓取javascript动态生成的html网页功能示例

    本文实例讲述了Python3实现抓取javascript动态生成的html网页功能.分享给大家供大家参考,具体如下: 用urllib等抓取网页,只能读取网页的静态源文件,而抓不到由javascript生成的内容. 究其原因,是因为urllib是瞬时抓取,它不会等javascript的加载延迟,所以页面中由javascript生成的内容,urllib读取不到. 那由javascript生成的内容就真的没有办法读取了吗?非也! 这里要介绍一个python库:selenium,本文使用的版本是 2.4

  • 六行python代码的爱心曲线详解

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题的本质,解决数据分析和可视化问题,其实也是Python的拿手好戏. 例如,画出指定区间的一个多项式函数: Python 代码如下: import numpy as np import matplotlib.pyplot as plt X = np.linspace(-4, 4, 1024) Y =

  • Python企业编码生成系统之系统主要函数设计详解

    本文实例讲述了Python企业编码生成系统之系统主要函数设计.分享给大家供大家参考,具体如下: 一 主要函数功能描述 函数 功能 mkdir 判断保存防伪码或补充防伪码的文件夹是否存在,如果不存在则建立文件夹. openfile 读取文本文件函数,主要读取保存产品编码和生成数量的文件mrsoft.mri,以及用户选择的已生成的编码文件. inputbox 输入验证判断函数,根据参数判断输入的是哪种类型,是否合法 wfile 编码输出显示函数,通过屏幕输出和文件输出两种方式输出生成的防伪码信息.

随机推荐