matplotlib绘制动图,matplotlib制作动画
本文主要介绍用python实现的matplotlib动画演示的元胞自动机,并用Python进行模拟。首先,它试图表达灯塔。本文通过示例代码非常详细的向大家介绍,有需要的朋友可以参考一下。
目录
ArtistAnimation动画FuncAnimation动画随机生命游戏维基百科有个有趣的话题叫细胞自动机:https://en.wikipedia.org/wiki/Cellular_automaton.
在20世纪70年代,一种叫做生活游戏的二维细胞自动机变得广为人知,尤其是在早期的计算机世界。由john conway发明,并由martin gardner在《科学美国人》的一篇文章中推广,规则如下:
任何少于两个活邻居的活细胞都会死亡,似乎是由人口不足引起的。任何有两个或三个活邻居的活细胞都会延续到下一代。任何有三个以上邻居的活细胞都会死亡,就好像是由于人口过多。任何一个死细胞,只要有三个活的邻居,就会变成活细胞,就像通过繁殖一样。
结论是:任何活细胞在有两三个活邻居的情况下都能活到下一代,否则就会死亡。任何三个活邻居的死细胞都会变成活细胞,表示繁殖。
在康威的《生命的游戏》中,展示了几种初始状态:
我们用python模拟一下吧。首先,尝试代表Beacon:
将numpy作为np导入
将matplotlib.pyplot作为plt导入
universe=np.zeros((6,6), byte )
#灯塔
宇宙[1:3,1:3]=1
宇宙[3:5,3:5]=1
印刷(宇宙)
im=plt.imshow(universe,cmap=binary )
[[0 0 0 0 0 0]
[0 1 1 0 0 0]
[0 1 1 0 0 0]
[0 0 0 1 1 0]
[0 0 0 1 1 0]
[0 0 0 0 0 0]]
你可以看到信标的形状已经打印成功了。我们继续写元胞自动机的演化规则:
def cellular_auto(宇宙):
universe_new=universe.copy()
h,w=universe.shape
对于范围(h):内的y
对于范围(w):内的x
neighbor _ num=universe[x-1: x 2,y-1:y 2]。sum()-宇宙[x,y]
#任何一个有三个活邻居的死细胞都会变成活细胞并进行复制。
如果universe[x,y]==0且neighbor_num==3:
universe_new[x,y]=1
#任何有两三个活邻居的活细胞都能活到下一代,否则就死了。
如果universe[x,y]==1并且neighbor_num不在(2,3):中
universe_new[x,y]=0
回归宇宙_新
宇宙=细胞_自动(宇宙)
印刷(宇宙)
plt.axis(“关”)
im=plt.imshow(universe,cmap=binary )
[[0 0 0 0 0 0]
[0 1 1 0 0 0]
[0 1 0 0 0 0]
[0 0 0 0
1 0]
[0 0 0 1 1 0]
[0 0 0 0 0 0]]
ArtistAnimation动画
基于此我们可以制作matplotlib的动画,下面直接将Blinker、Toad、Beacon都放上去:
from matplotlib import animation
然后我们画一下Pulsar:
# Pulsar
FuncAnimation动画
另一种创建matplotlib动画的方法是使用FuncAnimation,完整代码:
from matplotlib import animation
这种动画生成速度较慢,好处是可以导出html文件:
with open("out.html", "w") as f:
还可以保存MP4视频:
anim.save("out.mp4")
或gif动画:
anim.save("out.gif")
注意:保存MP4视频或GIF动画,需要事先将ffmpeg配置到环境变量中
ffmpeg下载地址:
链接: https://pan.baidu.com/s/1aioB_BwpKb6LxJs26HbbiQ?pwd=ciui
提取码: ciui
随机生命游戏
接下来,我们创建一个50*50的二维生命棋盘,并选取其中1500个位置作为初始活细胞点,我们看看最终生成的动画如何。
完整代码如下:
from matplotlib import animation
到此这篇关于Python实现的matplotlib动画演示之细胞自动机的文章就介绍到这了,更多相关pythonmatplotlib动画内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。