快速入門Matplotlib

來源:互聯網
上載者:User

以下是原文本文:

資料的處理、分析和可視化已經成為 Python 近年來最重要的應用之一。這種現象又進一步引出“大資料”分析等類似的話題,而大資料分析在人們所能預見的諸多領域內都有廣泛應用,這其中就包含筆者個人感興趣的機器學習。

Python 在處理資料、分析資料以及資料視覺效果方面擁有很多功能強大的工具,這也是 Python 在科學領域中能夠迅速發展的一個主要原因。

在接下來的一系列文章中,我們將介紹 Python 科學計算中涉及的主要的庫,並且學習如何使用它們處理資料以滿足我們的需求。但是我們並非只是停留在快速寫出模板代碼來使用這些庫的層面上,我們還會瞭解這些庫背後的數學知識,以協助我們更好地理解庫的運行原理。

首先,我們將從一個功能非常強大的庫 Matplotlib 開始介紹,在後面的文章中也會一直用到這個庫。 什麼是 Matplotlib?

簡單來說,Matplotlib 是 Python 的一個繪圖庫。它包含了大量的工具,你可以使用這些工具建立各種圖形,包括簡單的散佈圖,正弦曲線,甚至是三維圖形。Python 科學計算社區經常使用它完成資料視覺效果的工作。

你可以在他們的網站上瞭解到更多 Matplotlib 背後的設計思想,但是我強烈建議你先瀏覽一下他們的圖庫,體會一下這個庫的各種神奇功能。 畫一個簡單的圖形

首先我們要畫一條在 [0, 2pi] 上的正弦曲線。讀者應該會注意到我們在這裡使用了 Numpy 庫,但是即便你沒有使用過這個庫也不用擔心,在後面的文章中我們也會介紹到 Numpy 庫。

import matplotlib.pyplot as pltimport numpy as np

以上這些就是我們將要用到的匯入模組。在我的上一篇文章(以及另一篇文章)中都提到過 from x import * 是一種糟糕的匯入方式。我們不想在程式裡重複書寫 matplotlib.pyplot 和 numpy,這種書寫方式過於冗長,因此我們採用了上面的折中寫法。

# 簡單的繪圖x = np.linspace(0, 2 * np.pi, 50)plt.plot(x, np.sin(x)) # 如果沒有第一個參數 x,圖形的 x 座標預設為數組的索引plt.show() # 顯示圖形

上面的代碼將畫出一個簡單的正弦曲線。np.linspace(0, 2 * np.pi, 50) 這段代碼將會產生一個包含 50 個元素的數組,這 50 個元素均勻的分布在 [0, 2pi] 的區間上。

plot 命令以一種簡潔優雅的方式建立了圖形。提醒一下,如果沒有第一個參數 x,圖形的 x 軸座標將不再是 0 到 2pi,而應該是數組的索引範圍。

最後一行代碼 `plt.show() 將圖形顯示出來,如果沒有這行代碼映像就不會顯示。

運行代碼後應該會類似得到下面的圖形:

在一張圖上繪製兩個資料集

大多數時候讀者可能更想在一張圖上繪製多個資料集。用 Matplotlib 也可以輕鬆實現這一點。

x = np.linspace(0, 2 * np.pi, 50)plt.plot(x, np.sin(x),        x, np.sin(2 * x))plt.show()

上面的代碼同時繪製了表示函數 sin(x) 和 sin(2x) 的圖形。這段代碼和前面繪製一個資料集的代碼幾乎完全相同,只有一點例外,這段代碼在調用 plt.plot() 的時候多傳入了一個資料集,並用逗號與第一個資料集分隔開。

最後你會得到類似於下麵包含兩條曲線的圖形:

自訂圖形的外觀

當在同一個圖形上展示多個資料集時,通過改變線條的外觀來區分不同的資料集變得非常必要。

# 自訂曲線的外觀x = np.linspace(0, 2 * np.pi, 50)plt.plot(x, np.sin(x), 'r-o',        x, np.cos(x), 'g--')plt.show()

上述代碼展示了兩種不同的曲線樣式:'r-o' 和 'g--'。字母 'r' 和 'g' 代表線條的顏色,後面的符號代表線和點標記的類型。例如 '-o' 代表包含實心點標記的實線,'--' 代表虛線。其他的參數需要讀者自己去嘗試,這也是學習 Matplotlib 最好的方式。

顏色: 藍色 - 'b' 綠色 - 'g' 紅色 - 'r' 青色 - 'c' 品紅 - 'm' 黃色 - 'y' 黑色 - 'k'('b'代表藍色,所以這裡用黑色的最後一個字母) 白色 - 'w'  

線: 直線 - '-' 虛線 - '--' 點線 - ':' 點劃線 - '-.'  

常用點標記 點 - '.' 像素 - ',' 圓 - 'o' 方形 - 's' 三角形 - '^' 更多點標記樣式點擊這裡

最後你會得到類似下面的圖形:

使用子圖

使用子圖可以在一個視窗繪製多張圖。

# 使用子圖x = np.linspace(0, 2 * np.pi, 50)plt.subplot(2, 1, 1) # (行,列,活躍區)plt.plot(x, np.sin(x), 'r')plt.subplot(2, 1, 2)plt.plot(x, np.cos(x), 'g')plt.show()

使用子圖只需要一個額外的步驟,就可以像前面的例子一樣繪製資料集。即在調用 plot() 函數之前需要先調用 subplot() 函數。該函數的第一個參數代表子圖的總行數,第二個參數代表子圖的總列數,第三個參數代表活躍地區。

活躍地區代表當前子圖所在繪圖區域,繪圖區域是按從左至右,從上至下的順序編號。例如在 4×4 的方格上,活躍地區 6 在方格上的座標為 (2, 2)。

最終你會得到類似下面的圖形:

簡單的散佈圖

散佈圖是一堆離散點的集合。用 Matplotlib 畫散佈圖也同樣非常簡單。

# 簡單的散佈圖x = np.linspace(0, 2 * np.pi, 50)y = np.sin(x)plt.scatter(x,y)plt.show()

正如上面代碼所示,你只需要調用 scatter() 函數並傳入兩個分別代表 x 座標和 y 座標的數組。注意,我們通過 plot 命令並將線的樣式設定為 'bo' 也可以實現同樣的效果。

最後你會得到類似下面的無線圖形:

彩色映射散佈圖

另一種你可能用到的圖形是彩色映射散佈圖。這裡我們會根據資料的大小給每個點賦予不同的顏色和大小,並在圖中添加一個顏色欄。

# 彩色映射散佈圖x = np.random.rand(1000)y = np.random.rand(1000)size = np.random.rand(1000) * 50colour = np.random.rand(1000)plt.scatter(x, y, size, colour)plt.colorbar()plt.show()

上面的代碼大量的用到了 np.random.rand(1000),原因是我們繪圖的資料都是隨機產生的。

同前面一樣我們用到了 scatter() 函數,但是這次我們傳入了另外的兩個參數,分別為所繪點的大小和顏色。通過這種方式使得圖上點的大小和顏色根據資料的大小產生變化。

然後我們用 colorbar() 函數添加了一個顏色欄。

最後你會得到類似於下面的彩色散佈圖:

長條圖

長條圖是另一種常見的圖形,也可以通過幾行代碼建立出來。

# 長條圖x = np.random.randn(1000)plt.hist(x, 50,color='purple',histtype="bar",rwidth=0.5)#rwidth 可以調控柱狀圖之間的間距。plt.show()

長條圖是 Matplotlib 中最簡單的圖形之一。你只需要給 hist() 函數傳入一個包含資料的數組。第二個參數代表資料容器的個數。資料容器代表不同的值的間隔,並用來包含我們的資料。資料容器越多,圖形上的資料條就越多。

最終你會得到類似下面的長條圖:


標題,標籤和圖例

當需要快速建立圖形時,你可能不需要為圖形添加標籤。但是當構建需要展示的圖形時,你就需要添加標題,標籤和圖例。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.