电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何基于Python Matplotlib實現網格動畫

瀏覽:119日期:2022-07-16 17:59:57

—1—

如果你對本文的代碼感興趣,可以去 Github (文末提供)里查看。第一次運行的時候會報一個錯誤(還沒找到解決辦法),不過只要再運行一次就正常了。

這篇文章雖然不是篇典型的數據科學類文章,不過它涉及到數據科學以及商業智能的應用。Python 的 Matplotlib 是最常用的圖表繪制以及數據可視化庫。我們對折線圖、柱狀圖以及熱力圖都比較熟悉,但你知道用 Matplotlib 還能做簡單的動畫嗎?

下面就是用 Matplotlib 制作動畫的例子。展示的是 John Conway 的 《The Game of Life》,這是一個 Metis(數據科學夏令營)中的編程挑戰題目,同時給了我一個機會來制作我的第一個 Python 動畫。看看結果的動圖:

如何基于Python Matplotlib實現網格動畫

這篇文章的重點還是主要放在 python 中如何用 Matploylib 制作動畫。

但如果你不太熟悉模擬游戲的話(它更像是可以看的模擬動畫,而非可以玩的游戲),我來給大家介紹一下規則:

一開始先設置一個 N×N 的網格(我的動畫中用的是 50×50 ); 接著隨機地向格子中填充“小細胞”(一開始隨機地從 2500 個格子中選取 1500 個進行填充); 如果鄰居小細胞少于等于 1 個,那格子中的小細胞會死掉; 如果鄰居大于等于 4 個的也會死掉; 只有 2 個或 3 個鄰居時可以生存; 空的格子中如果正好有 3 個鄰居,則會長出 1 個新的“小細胞”;

—2—

建立網格

我們首先導入所需的庫。

import timefrom IPython import displayimport matplotlib.pyplot as pltimport matplotlib.animation as animation

我們會利用Matploylib 動畫模塊中的 FuncAnimation() 函數。 FuncAnimation()是通過多次調用一個函數并逐次更新圖片來實現讓圖片動起來的。我們來一步步地實現這個過程。

但首先,我們需要先初始化我們的網格。下面的幾行代碼用來存儲我們輸入的數據:

我們需要一個 50×50 大小的網格; pad 變量可以使得計算鄰居變得更容易。通過在邊界外添加一層空白格子,我們就不需要額外再寫一個邏輯來處理網格的邊界。因此我們 50×50 的網格其實是被一圈空白格子包圍著,這使得實際的 numpy 序列的大小為 52×52; initial_cels 變量表示在網格啟動的時候我們想要多少“小細胞”。他們會被隨機地分布在網格上。

# Input variables for the boardboardsize = 50 # board will be X by X where X = boardsizepad = 2# padded border, do not change this!initial_cells = 1500 # this number of initial cells will be placed # in randomly generated positions

接下來我們隨機地生成一系列“小細胞”的初始坐標(上面我們選擇了 1500 個)。把這些坐標存儲在 pos_list 變量中。

# Get a list of random coordinates so that we can initialize# board with randomly placed organismspos_list = []for i in range(initial_cells): pos_list.append([random.randint(1, boardsize), random.randint(1, boardsize)])

然后我們是時候該初始化網格了。我們會用一組叫 my_board 的 numpy 序列來代表我們的網格——我們先生成一個 52×52 數值為 0 的矩陣序列作為開始(比 50×50 大是由于增加了空白邊緣),然后調用 init_board() 函數來根據 pos_list 中的坐標把“小細胞”填充到網格中。輔助函數的具體細節我不再展開講了,不過我把他們都整理到我的 Github 上了。

# Initialize the boardmy_board = np.zeros((boardsize+pad, boardsize+pad))my_board = init_board(pos_list, my_board)

—3—

制作網格動畫

這是我們最期待的部分——動畫!首先,我們需要完善一些配置。下面的幾行代碼用來生成展示我們動畫的 mtplotlib 圖框。

# Required line for plotting the animation%matplotlib notebook# Initialize the plot of the board that will be used for animationfig = plt.gcf()

接下來制作我們的第一幀。 mtplotlib 中的 imshow() 函數可以接收一組 numpy 矩陣然后返回一張圖片。很酷吧!

# Show first image - which is the initial boardim = plt.imshow(my_board)plt.show()

傳入 imshow() 的變量是我們的初始的網格 my_board。生成的圖片長這樣:

如何基于Python Matplotlib實現網格動畫

現在我們需要寫一個可以給 FuncAnimation() 調用的輔助函數。 animate() 函數接受一幀畫面作為輸入充當計數器。這個畫面計數器就是 FuncAnimation() 和 animate() 函數溝通的橋梁——在每一個時間點(也就是每一幀),它都會調用一次 animate()。然后 animate() 會逐次使用輔助函數 update_board() 來對網格進行迭代。最后, set_data() 函數將圖片更新為迭代后的網格,這就完成了。

# Helper function that updates the board and returns a new image of# the updated board animate is the function that FuncAnimation callsdef animate(frame): im.set_data(update_board(my_board)) return im,

一切順利!我們準備調用 FuncAnimation() 函數了。注意輸入的參數:

fig 是我們在前面創建的用來裝載我們的動畫的圖形變量; animate 是 FuncAnimation() 用畫面計數器進行溝通的函數(自動傳入,不需要特別聲明) frames 表示我們希望動畫持續多少幀,在這里我們想要動畫的長度為 200 幀; interval 表示每一幀之間間隔的毫秒數。我們想要每幀之間間隔 50 毫秒。

# This line creates the animationanim = animation.FuncAnimation(fig, animate, frames=200,interval=50)

就這么簡單!不是很難吧?為了慶祝我們成功制作動畫,我再送大家一個動畫:

如何基于Python Matplotlib實現網格動畫

—4—

總結

希望這篇文章能幫到大家。在結束之前,讓我來幫助大家腦補更多我們今天學到的動畫功能在數據科學上的應用:

一個個地畫出蒙特卡洛模擬數據,你能觀察到最終的分布是如何逐步形成的; 按順序遍歷時間序列數據,可以描繪你的模型或數據在新的觀察角度下有什么表現; 當你改變輸入參數時,比如族群數,可以展現你的算法是如何劃分族群的; 根據時間或不同的數據子集生成關聯熱力圖,用于觀察不同的樣本是如何影響你的模型的預期參數的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 长城人品牌官网| 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 锂电叉车,电动叉车_厂家-山东博峻智能科技有限公司 | 免费个人pos机申请办理-移动pos机刷卡-聚合收款码办理 | 智慧养老_居家养老_社区养老_杰佳通 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 手术示教系统-数字化手术室系统-林之硕医疗云智能视频平台 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 武汉宣传片制作-视频拍摄-企业宣传片公司-武汉红年影视 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 上海APP开发-APP制作-APP定制开发-上海APP开发制作公司-咏熠科技 | 上海橡胶接头_弹簧减震器_金属软接头厂家-上海淞江集团 | 信阳市建筑勘察设计研究院有限公司 | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 不锈钢搅拌罐_高速搅拌罐厂家-无锡市凡格德化工装备科技有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 |