Python实现动态绘图的示例详解
matplotlib中的animation提供了动态绘图功能,这篇文章主要为大家详细介绍了Python如何利用matplotlib实现
matplotlib中的animation提供了动态绘图功能,下面列举一个最简单的动态绘制三角函数的例子,来初步演示一下。
(资料图片仅供参考)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots(figsize=(5,3))
line, = ax.plot([], [], lw=1)
ax.grid()
def init():
ax.set_ylim(-1, 1)
ax.set_xlim(0, 10)
line.set_data([],[])
plt.tight_layout()
return line,
def animate(N):
x = np.arange(N)/10
y = np.sin(x)
line.set_data(x, y)
return line,
ani = animation.FuncAnimation(fig, animate, range(100), init_func=init, interval=40)
ani.save("ani_test_0.gif")
plt.show()
效果如下
其中,fig, ax为绘图窗口和坐标轴,这是在任何绘图操作中都涉及到的元素,但在本例中的动态绘图操作中,ax是以一种"全局变量"的形式存在的,将在后米娜的init和animate函数中被直接调用。
line即为绘制在ax之上的曲线,由于ax.plot默认返回一个曲线列表,通过line,=这样的方法,可以提取出曲线列表中的第0条曲线,其结果等价于
line = ax.plot([], [], lw=1)[0]
接下来init函数用于绘图曲线的初始化,animate用于调整绘图函数的动态变化,其输入N暂时可以简单地理解为第N张图像的曲线。
接下来,就是动态绘图的核心对象FuncAnimation。
FuncAnimation是一个类,其构造函数为
FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)
前面的4个参数在示例程序中已经用到,fig为绘图窗口;func为图像更新函数;frames为绘图帧号;init_func为图像的初始化函数。
其绘图逻辑写成伪代码类似于
for n in frames:
if n>0:
draw(func(n))
else:
draw(init(n)) 如果frames是一个整数,则在调用时会自动转为range(frames)。
而用于绘图的主要对象,就是坐标轴ax,故而在示例中的animate以及init函数的返回对象是line,,当然也可以写成return [line]。
FuncAnimation中的其他参数含义如下:
fargs为绘图函数func的其他输入参数save_count缓存帧数interval帧延时,默认200毫秒,帧率25fps对应40毫秒。repeat_delay重复延时,单位是微秒repeat为False时,动画将只演示一遍。
三维情况的动图绘制函数,机理与二维是相同的,下面引用官方画廊中的示例,来演示一下三维动图的绘制流程,首先生成一组随机行走的曲线
np.random.seed(19680801) # 随机数种子,便于复现
def random_walk(N, L=0.05):
st = np.random.random(3)
steps = np.random.uniform(-L, L, size=(N, 3))
walk = st + np.cumsum(steps, axis=0)
return walk
walks = [random_walk(30) for index in range(40)]
random_walk可生成一条随机行走的三维曲线,walks通过调用这个函数,共生成了40条曲线,下面就是对这40条曲线的调用
def animate(num, walks, lines):
for line, walk in zip(lines, walks):
line.set_data(walk[:num, :2].T)
line.set_3d_properties(walk[:num, 2])
return lines
fig = plt.figure(figsize=(5,4))
ax = fig.add_subplot(projection="3d")
lines = [ax.plot([], [], [], lw=1)[0] for _ in walks]
ax.set(xlim3d=(0, 1), xlabel="X")
ax.set(ylim3d=(0, 1), ylabel="Y")
ax.set(zlim3d=(0, 1), zlabel="Z")
ani = animation.FuncAnimation(
fig, animate, 30, fargs=(walks, lines), interval=100)
plt.show()
效果如下
到此这篇关于Python实现动态绘图的示例详解的文章就介绍到这了,更多相关Python动态绘图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
关键词:
matplotlib中的animation提供了动态绘图功能,这篇文章主要为大家详细介绍了Python如何利用matplotlib实现
关注人民币收藏,带你发现身边的财富!大家都知道995是紫色的,可能许多人不知道995也是有绿色的,也就是所
“你凭什么拉我?”“我就要插队!”“我们不是好惹的!”近日,浙江金华横店影视城某景区门口两名女子疑似
公众号“深圳安居房”,实时传递深圳安居房、深圳公租房、深圳人才房等相关信息!安居路上一路相伴,还有专
5月4日,国际黄金现货价格一度冲上2079 67美元 盎司,刷新历史纪录。COMEX黄金期货价格盘中也涨至2085 40美
一、山东省泰安市天气预报1、泰安市气象台2023年5月7日5时50分继续发布大风蓝色预警信号。2、预计今天白天
今天,大学路小编为大家带来了山东高考分数线淄博大学2012山东高考录取分数线是多少?,希望能帮助到广大考
今天来聊聊关于g319国道起止点,G319国道的文章,现在就为大家来简单介绍下g319国道起止点,G319国道,希望对各
前置耳机孔没声音什么原因,前置耳机孔没声音这个很多人还不知道,现在让我们一起来看看吧!1、如果你的声卡
秦刚:打造更加紧密、友好的邻国和伙伴关系
2023年5月6日谣言:网传“重庆渝北一小学生被人贩子扎针后昏迷”?真相:此传言不实。近日,网传重庆渝北一
乐居财经张林霞5月6日,2023立夏房企最佳官宣海报获得者为:越秀地产。立夏,万物繁茂,荷风送爽,美好盛放
根据国家心血管病中心统计显示,我国血脂异常人数已经超过了4亿人,但是与如此庞大的患病人数相比较,可以
,很多喜欢玩csgo的玩家都有这样的疑惑,在这里很多玩家开箱子实现一夜暴富,很多手套和宝石刀价值超多
1、导语:阿狸有哪些皮肤介绍?阿狸是英雄联盟里面算比较火爆的中单了,那我们一起来看看阿狸有哪些皮肤吧!
人民网南昌5月6日电(记者秦海峰)记者6日从江西丰城市获悉,5月6日6时左右,丰城市丽村镇在清丰堤巡堤时发现
火炬之光无限新手英雄特性选什么好?游戏前期英雄特性的选择非常关键,目前英雄数量较多,新手不清楚如何选
老版霍元甲电视剧全集播放,老版霍元甲电视剧全集这个很多人还不知道,现在让我们一起来看看吧!1、《大侠霍
1、脚是万气之源,所以泡脚很有好处。2、用温热水。3、不要太烫,不要超过60度。4、一般在40--50度就可以了
1、霞儿,颜雪,夏琪儿。2、依依,紫艳琴、狐魅等等。本文就为大家分享到这里,希望小伙伴们会喜欢。
中国社会科学院农村发展研究所、国家统计局农村社会经济调查司与社会科学文献出版社日前联合发布的《农村绿
今天来聊聊关于四川彭州属于成都吗,四川彭州属于哪个市的文章,现在就为大家来简单介绍下四川彭州属于成都
“千层石树遥行路,一带山田放水声。”暮春时节,记者走进国家级全域土地综合整治试点乡镇牛佛镇,田坎间一
1、加拿大气候特点 加拿大阳光充沛、四季分明。2、3月中旬至6月下旬为春季。3、6月下旬至9月中旬为夏季
1、通达信没有BIGORDER(委托单大单成交比例)函数,无法直接转换。2、但通达信有L2_VOL(N,M)函数单数分档,
Copyright 2015-2022 现在酒业网 版权所有 备案号:粤ICP备18023326号-5 联系邮箱:855 729 8@qq.com