Day 27 科學繪圖Matplotlib:畫著你,畫不出你的骨骼
註:本篇文章同步刊載於iT邦幫忙,為鐵人賽之系列文章。
https://ithelp.ithome.com.tw/articles/10247303
今天我們要來介紹的是Matplotlib,
對於Python來說,是一套非常常用於科學繪圖的繪圖程式庫,
同時也相當良好地支援了NumPy的陣列,
此外,通常狀況下,只要設定恰當,
也可以很順利地在一些帶有視窗運作的Python執行環境,
如IPython, Jupyter Notebook, colab等直接內嵌繪製圖片,
可以說是相當的方便!
由於最初的目的是提供如同Matlab軟體的繪圖方式,
所以常用Matlab的人可能會覺得很多東西似曾相識XD
要使用matplotlib時,官方有提供pylab ,
將matplotlib的pyplot和numpy合併在一起,
但還是建議numpy歸numpy,pyplot歸pyplot 。
同樣的,如果電腦還沒有matplotlib套件的話,
請先使用pip install進行安裝。
| |
接下來讓我們來介紹一些基本的功能。
首先,我們要先將numpy和matplotlib的pyplot給import進來:
| |
記得上一篇我們做過一個隨積分布的陣列嗎?
如果我們想將其使用直方圖(Histogram)來表現出點的分布數量的話,
可以使用plt.hist(),將陣列輸入給plt;
同時,plt在繪製以後,要經過plt.show()的方法才會顯示出來。
| |
應該可以看到接近如下的圖(前面是分10組,後面是分30組):


我們在繪圖時,如果一般使用畫線按座標的話,
通常是以plt.plot(x, y, linewidth)的型式,
此時就要剛好每個x的元素都對應到y的元素:
| |

請留意一點,由於Python的陣列預設從0開始,所以當我們只給一段座標時,
會被當成y座標,且x會從0開始起算,以整數遞增:
| |


以plt.plot的方式繪圖時,畫上去的圖被稱為figure,
figure的軸則是axes,可以用add_subplot(1,1,1)方法取用到,
如果同時放多張子圖的話(1,1,1)代表第一張。
(這不是很好解釋,如果一次只畫一張圖的話就不管它啦!)
我們可以在繪製完圖以後再做額外的事情:
| |

在plt.plot輸入陣列後加上一個格式字串可以用來代表畫線的樣式,
指定linewidth可以修改畫線的粗細。
| |
其結果應如下所示:

在處理過後可畫線的圖以後,如果我們的資料是零散的點,
不需要畫線的話,我們可以用散點圖(scatter)來進行繪製:
| |
如果要繪製3D的圖的話,要利用plt.axes(),
將其projection設為’3d’。
同時由於有三維座標,所以要使用ax.scatter3D(x, y, z, color)。
| |
最後我們會得到一個3D散點圖,其介面是可以按滑鼠左鍵拖曳旋轉的呦!
讀者可以自己嘗試看看~

其他其實還有相當多的內容,有興趣的話可以看看官方文件的說明。
像是各種不同種類的圖形、標記方式、標籤等等,
如果使用者想更進一步的話,可以試試看找一些如繪製股票線形的教學範例,
跟著操作看看,相信會更有收穫!
那麼,我們就明天見囉!
工商時間:
抽獎活動還在繼續累積人數(現在好像沒有人想抽XD)
在Python Taiwan的連結第100篇的文章 底下,
公開分享到你的臉書、按讚該篇文章、並留言告訴我說,
「你最喜歡這一整個系列的哪一篇?為什麼?」或
「除了從LeetCode學演算法系列以外,
你還想要看到關於什麼方向的文章?」
超過20則留言的話 (有完成以上步驟的才算),我們就抽一組
「從Leetcode學演算法|進階篇」+「從Leetcode學演算法|面試篇」
課程的免費兌換券進行贈送!
期限嘛…就延長到滿人數吧XDD (不然也沒辦法哈哈)
容筆者工商一下,
「從Leetcode學演算法|進階篇」 開放預購啦!
這次選了40道難度加深的LeetCode題目,
同樣也會細部解說對應的技巧及須要掌握的演算法!
同時這次購買進階篇的話,
額外還加贈**「從Leetcode學演算法|面試篇」** !
當中包含了面試準備須知分享 ,及訪談國內外不同經驗的工程師 ,
讓你不論是想走前端/後端/一般軟工 或者是想找國外的工作 ,
是初學想轉職 還是正在工作 ,都能夠從中得到收穫呦!
有興趣的朋友可以使用下面的早鳥優惠~
「從Leetcode學演算法|進階篇」+「從Leetcode學演算法|面試篇」 :
https://bit.ly/advleetcode
「從Leetcode學演算法」全套(基礎/進階/面試篇)同捆優惠:
https://bit.ly/allleetcode
