奮戰matplotlib

更新於 發佈於 閱讀時間約 5 分鐘

Game of Life的輸出結果,也就是每代演化後universe的長相,程式要怎麼寫呢?現在有個二維list,裡頭放的是一堆0和1,要怎麼樣用西洋棋盤式的方式來顯示呢?這看來勢必得用到別人寫好的module來做,才能省時、省力又漂亮。第一個想到的,當然就是matplotlib這個科學繪圖用的module了,但到底合不合用,要試過才知道,如果不盡人意,再換其他module試試。

既然要用matplotlib,那就得先研究一下裡頭有些什麼東西可以用,還有這些東西的用法。碰到這種人家寫好的工具,第一件要做的事,當然就是到官網看看。

畢竟是一個已經發展了很久、很多人使用的module,官網的資料非常多、非常詳盡,詳盡到讓人看了心慌慌,腦袋一片空白。這麼多的資料要看到什麼時候啊?!我要的,就只是畫個簡單的圖而已,有必要鉅細靡遺的把所有功能都研究得很透徹嗎?當然不!既然要的不多,那就找出需要的部分就好。寫程式遇到新的東西,可不能每次都從頭到尾把所有文件都看過才開始寫,這樣子的效率太差了。以前有陣子覺得,學新東西,就是要全盤掌握。如果有書的話,那就要從頭到尾,一個字一個字啃完。後來發現這樣不行,太沒效率了,新東西出現得又快又多,啃書的方式不適合。所以現在的做法是,只研究需要的部分,其他的,有時間的時候,再慢慢研究。

「只研究需要的部分」,這話說得輕巧,但真要有這麼簡單就好了,既然是沒學過的新東西,又怎麼知道哪些是現在需要的,哪些又是可以先不理會的?所以囉,這種做法,比較適合用來研究已經有一些概念的新東西,這樣才能事半功倍。說到這,就想到念英文時,總有高手會教說,看文章遇到不認識的單字時,先不要查字典,整段先看完,利用上下文或許就能猜到那個不認識的單字是什麼意思。對於高手來說,這方法絕對管用。可是不知道高手有沒有想過,對於低手來說,可能整段文字,有超過一半以上都是不認識的單字,那是要怎麼根據上下文來猜啦?!回想上大學時,第一次讀專業科目的原文書時,就是這種滿滿的低手的心情。所以說,每種學習方法都有它適用的情況,用對了,讓你上天堂;用錯了,讓你住在滿滿的挫折感套房中。

言歸正傳,那要怎麼和matplotlib打交道呢?從一些網路上查到的簡介來看,語法和matlab其實差不多。這就好辦了!這樣重點就只在找到合用的method或function,設定好參數,然後把資料餵進去,就大功告成了。之所以這麼認為,是因為以前用過matlab,還有科學繪圖軟體Grapher,以及Excel的繪圖功能,所以對程式語法,還有畫科學圖表時的一些專用術語,都有一定程度的瞭解。這就好比整段英文中,大部分的字都認得,要從上下文猜那幾個生字的意思,應該會容易一些。

在matplotlib官網中,有許多範例,各式各樣的圖都有,不過就是沒有看到可以直接拿來改的。有幾張看著似乎有那麼一點可以拿來用的樣子,但看了一下範例程式,卻又有點摸不著頭緒。既然如此,那就自己從基本的圖樣來改造囉!

哪個基本圖樣適合用來顯示universe呢?毫無懸念,就是scatter plot。在universe中的每個元素,都有相對應的位置,也就是在第幾行、第幾列都很清楚。換句話說,每個元素就是一個資料點,而它在universe中的位置,就對應到資料點在scatter plot中的座標。畫出格線,點上資料點,然後用marker把格子填滿,這樣就大功告成了。

唉!事情要有這麼順利就好囉!資料點會落在格線的交叉點上,而不是格線的中心。這個好解決,調整一下格線的位置就可以。最要命的問題是:marker的大小要多大,才能剛好填滿格子,不會太大,也不會太小?這得慢慢的算、慢慢的調。即使調好了,萬一universe的大小改變了,或者需要調整圖的大小,那原先調好的marker大小,八成會破功要重調。唯一的解法,就是要讓marker的大小可以因應universe的大小和圖的大小自動調整。這看來沒那麼容易處理,因為得要知道matplotlib細部的運作方式才有辦法做到。不玩這個,另外想辦法。

雖然要放棄用scatter plot來畫,但既然都花時間研究了,那還是調整一下畫法,至少在看測試結果時,會比較舒服一些。那要畫成啥樣呢?格線當然要去掉,然後marker改用圓點,而且只畫活著的cell。畫出來的樣子差強人意,至少比看一堆0、1和逗號好多了。口說無憑,就長這樣:

gif動畫(使用PhotoScape製作)

gif動畫(使用PhotoScape製作)







raw-image






留言
avatar-img
留言分享你的想法!
avatar-img
ysf的沙龍
15會員
141內容數
寫點東西自娛娛人
ysf的沙龍的其他內容
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
2024年12月7日,因翻譯著作的緣故,無意中發現了《Sometimes, When the Light》這首詩的片段,秉持著把整份內容消化再進行翻譯的龜毛原則,於是上網搜尋了原作詩詞及作者的介紹。 不知道島民有沒有這樣的經驗:當遇見一件創作(可以是著作、畫、雕像等各項創作作品),不知為何才那麼一
Thumbnail
2024年12月7日,因翻譯著作的緣故,無意中發現了《Sometimes, When the Light》這首詩的片段,秉持著把整份內容消化再進行翻譯的龜毛原則,於是上網搜尋了原作詩詞及作者的介紹。 不知道島民有沒有這樣的經驗:當遇見一件創作(可以是著作、畫、雕像等各項創作作品),不知為何才那麼一
Thumbnail
11/24是全台最感動的一天,更是創造歷史的一天。一個不被期待的中華隊,不斷逆境而上,突破重圍,直到登上世界的巔峰。這真是宛如一場電影劇情般的情結,真實在生活中上演。 你可知道,為什麼中華隊奪冠是一種奇蹟的事件: 其一,台灣總人口數只有2300萬人,相較…
Thumbnail
11/24是全台最感動的一天,更是創造歷史的一天。一個不被期待的中華隊,不斷逆境而上,突破重圍,直到登上世界的巔峰。這真是宛如一場電影劇情般的情結,真實在生活中上演。 你可知道,為什麼中華隊奪冠是一種奇蹟的事件: 其一,台灣總人口數只有2300萬人,相較…
Thumbnail
本文分享了一位農民在農業展覽會上獲得百香果的故事,描述了種植過程中的挑戰與收穫,以及從中領悟到的生活哲理。透過植株的生長與管理,作者反映了在面對困難時,依然可以保持樂觀的心態,像對待作物一樣對待人生。在這段旅程中,農民與家人一起勞作,展現出對生活的熱愛與感恩。
Thumbnail
本文分享了一位農民在農業展覽會上獲得百香果的故事,描述了種植過程中的挑戰與收穫,以及從中領悟到的生活哲理。透過植株的生長與管理,作者反映了在面對困難時,依然可以保持樂觀的心態,像對待作物一樣對待人生。在這段旅程中,農民與家人一起勞作,展現出對生活的熱愛與感恩。
Thumbnail
  北斗南門萬應佰姓公建立年代不詳,據北斗鎮志載,為祭祀1896年義軍反攻北斗東、南門之戰中,犧牲之18名抗日烈士。   此役由猛將陳發領導,打得日軍落花流水,狼狽逃回彰化城。 
Thumbnail
  北斗南門萬應佰姓公建立年代不詳,據北斗鎮志載,為祭祀1896年義軍反攻北斗東、南門之戰中,犧牲之18名抗日烈士。   此役由猛將陳發領導,打得日軍落花流水,狼狽逃回彰化城。 
Thumbnail
全片就看女主角塔莉雅 ‧ 萊德(Talia Ryder)一人精湛舞技與演技的雙重展現,如何從起初的天真少女,歷經打擊為求上位不惜代價的瘋魔,到最後抓住機會關鍵一跳,逆境求生東山再起,成就完美自我的身心成長,因為是真實故事改編,所以在觀影過程中,更讓讓觀眾看得驚艷、喟嘆婉惜,到擊掌為之喝采!
Thumbnail
全片就看女主角塔莉雅 ‧ 萊德(Talia Ryder)一人精湛舞技與演技的雙重展現,如何從起初的天真少女,歷經打擊為求上位不惜代價的瘋魔,到最後抓住機會關鍵一跳,逆境求生東山再起,成就完美自我的身心成長,因為是真實故事改編,所以在觀影過程中,更讓讓觀眾看得驚艷、喟嘆婉惜,到擊掌為之喝采!
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News