快速入門 Matplotlib

2021-03-02 Python那些事

本文的原作者是 Jamal Moir,是 Python 科學計算系列的第一篇文章。

本文譯者 linkmyth,校對 EarlGrey@編程派。linkmyth 是同濟大學的在讀碩士,主攻web開發、機器學習等方向。

以下是原文正文:

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

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

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

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

什麼是 Matplotlib?

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

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

畫一個簡單的圖形

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

import matplotlib.pyplot as plt
import 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) * 50
colour = 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)
plt.show()

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

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

標題,標籤和圖例

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

# 添加標題,坐標軸標記和圖例
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), 'r-x', label='Sin(x)')
plt.plot(x, np.cos(x), 'g-^', label='Cos(x)')
plt.legend() # 展示圖例
plt.xlabel('Rads') # 給 x 軸添加標籤
plt.ylabel('Amplitude') # 給 y 軸添加標籤
plt.title('Sin and Cos Waves') # 添加圖形標題
plt.show()

為了給圖形添加圖例,我們需要在 plot() 函數中添加命名參數 'label' 並賦予該參數相應的標籤。然後調用 legend() 函數就會在我們的圖形中添加圖例。

接下來我們只需要調用函數 title(),xlabel() 和 ylabel() 就可以為圖形添加標題和標籤。

你會得到類似於下面這張擁有標題、標籤和圖例的圖形:

以上內容應該足夠幫助讀者開始使用 Matplotlib 和 Python 實現數據可視化,但是這些內容並不全面。我強烈建議讀者親自嘗試使用這個工具,筆者也是通過這種方式掌握了這個工具。畫一些圖形,改變樣式並使用子圖功能,然後你就會很快掌握 Matplotlib 的使用方式。

這是一篇是關於如何使用 Matplotlib 和 Python 完成數據可視化的文章,也是 Python 科學計算系列文章中的第一篇。我希望讀者能從中有所收穫,並且對 Matplotlib 庫更加熟悉。

不要忘記分享和關注

請記得分享這篇文章讓更多的人看到它!另外,記得訂閱這個博客的郵件列表,關注我的Twitter並在Google+上添加我,這樣你就不會錯過任何有價值的文章!

我會閱讀所有的評論,所以無論你有什麼想要說的,或者是想要分享的,甚至是問題之類的,都可以在下面留言。

相關焦點

  • Python 繪圖庫 Matplotlib 入門教程
    qiangbo.space/2018-04-06/matplotlib_l1/Matplotlib是一個Python語言的2D繪圖庫,它支持各種平臺,並且功能強大,能夠輕易繪製出各種專業的圖像。本文是對它的一個入門教程。運行環境由於這是一個Python語言的軟體包,因此需要你的機器上首先安裝好Python語言的環境。關於這一點,請自行在網絡上搜索獲取方法。關於如何安裝Matplotlib請參見這裡:Matplotlib Installing。
  • Matplotlib入門詳細教程
    >Matplotlib入門詳細教程Matplotlib作為數據科學的的必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。截至當前,matplotlib發行版本號為3.2.1,適配python3.6及以上版本。matplotlib,是matrix + plot + library的縮寫,雖然命名很是直觀,但個人接觸之初卻是常常不禁嗤之以鼻:類比numpy、pandas、sklearn這些簡潔易寫的庫名,matplotlib由三個單詞縮略而成,冗餘得多;尤其是後面加了個lib,好像不加lib就不是庫?matplo
  • python:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。
  • Python Matplotlib入門學習(一)
    首先我們需要了解啥是matplotlib。圖:matplotlib官網主頁Matplotlib:使用Python可視化「Matplotlib是一個綜合庫,用於在Python中創建靜態,動畫和交互式可視化。Matplotlib使簡單的事情變得容易而困難的事情變得可能。」這是他們的廣告語,不多說了我們進入正題。
  • 快速解決 matplotlib 中文亂碼問題
    最近做了一個雲盤性能對比,用 matplotlib 繪製了一張圖,但是碰到了中文亂碼問題。簡單搜索之後,發現有人總結出了比較好的方案,親測可行。推薦給大家。作者:nphard 原文連結:http://nphard.me/2016/03/27/matplotlib-cn一個中文亂碼問題,讓我搞的好苦,總結一下。
  • Python 繪圖庫 Matplotlib 入門代碼實例
    入門代碼實例import matplotlib.pyplot as pltimport numpy as np# 用np.linspace生成50個元素的數組,均勻的分布在(0,2*pi)區間上面x = np.linspace(0, 2 * np.pi, 50)y = np.sin(x)# 把
  • 高效使用 Python 可視化工具 Matplotlib
    基本前提如果你除了本文之外沒有任何基礎,建議用以下幾個步驟學習如何使用matplotlib:學習基本的matplotlib術語,尤其是什麼是圖和坐標軸始終使用面向對象的接口,從一開始就養成使用它的習慣用基礎的pandas繪圖開始你的可視化學習用seaborn進行更複雜的統計可視化用matplotlib來定製
  • Matplotlib知識
    在介紹其他內容之前,我們先回顧一下基礎知識,這裡借用 Matplotlib 文檔的一張圖[1]:這些基礎概念十分有用,希望大家能記住其作用及對應的英文。如果遇到更複雜的需求,可以直接在官網文檔(https://matplotlib.org/contents.html)中進行查詢。
  • python數據科學系列:matplotlib入門詳細教程
    與之齊名,matplotlib作為數據科學的的另一必備庫,算得上是python可視化領域的元老,更是很多高級可視化庫的底層基礎,其重要性不言而喻。本篇對matplotlib進行系統性介紹,不會面面俱到,但求體系完備、詳略得當。
  • matplotlib的Python數據可視化和探索——入門指南
    matplotlib——最受歡迎的Python庫,用於數據可視化和探索我喜歡在Python中使用matplotlib。這是我學會掌握的第一個可視化庫,此後一直存在。matplotlib是最受歡迎的用於數據可視化和探索的Python庫,這是有原因的——它提供的靈活性和敏捷性是無與倫比的!
  • Matplotlib繪圖|快速定義圖表樣式的小技巧
    (X,S,color = "blue",linewidth = 3.0,linestyle = ":")為了方便起見,matplotlib 提供一個 matplotlibrc 文件接口,來全局自定義圖表屬性(圖表大小、DPI、線的寬度、坐標軸、樣式、網格屬性等),使用方法為 rcParams 命令,一次定義,對接下來創建的全部圖表的樣式都起效,避免了來回調參的麻煩rcParsms
  • Python數據可視化技能提升—用好matplotlib第1篇
    Python想必已經是大家最為熟悉不過的程式語言了,得益於它的易上手性,以及強大的兼容性和開源性,已經受到了廣泛「程序猿」的喜愛哦,通過前面幾次,咱們已經把Python的前世今生和Python的模塊化編程聊完了,這兩天收到朋友的私信說想了解點Python數據可視化相關的東東,俺想了下,就這樣好啦,以後呢,就把Python的基礎知識和實戰的專業知識點進行穿插講解啦,這樣既能讓入門的朋友快速熟悉
  • matplotlib 必知的 15 個圖
    繪圖的最後一篇,這次以案例和代碼為主,總結平時最常使用的繪圖API,參考前幾天推送給大家的matplotlib繪圖60案例這本書籍。需要導入的模塊,matplotlib繪圖,numpy幾乎是必用的包。# 導入numpy模塊import numpy as np# 導入pyplot模塊import matplotlib.pyplot as plt案例1基本折線圖# 創建序列[1,2,3,...,99]X = range(100)# X中元素依次取平方Y = [value ** 2 for value
  • python matplotlib模塊
    導入模塊導入matplotlib的子模塊import matplotlib.pyplot as pltimport numpy as np2./api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figureimport numpy as np import matplotlib.pyplot as plt #新建figurefig = plt.figure()# 定義數據x = [1
  • 【基本工具-05】matplotlib入門之線形圖
    畫一個最簡單的三角函數圖形 import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 10, 100)plt.plot(x, np.sin(x))plt.title('a sine curve')plt.xlabel('x')plt.ylabel('
  • Matplotlib數據可視化!
    聲明:以下使用的是IPython Shell%matplotlib  # 在IPython Shell調用Matplotlib繪圖接口,需要加這行代碼import matplotlib.pyplot as pltimport numpy
  • 記錄matplotlib庫報錯及解決方法
    csdn解決方法一:重裝matplotlib庫pip uninstall matplotlibpip install matplotlib但是操作之後仍是報同樣錯誤。csdn解決方法二:在導入matplotlib庫後,且在matplotlib.pyplot庫被導入前加「matplotlib.use(『agg』)」語句。
  • Matplotlib入門詳細教程(附導圖)
    ▲行文目錄結構,重點是右三分支01 關於MatplotlibMatplotlib是Python的一個繪圖庫,與Numpy、pandas共享數據科學三劍客的美譽,也是很多高級可視化庫的基礎。Matpl截至當前,Matplotlib發行版本號為3.2.1,適配Python3.6及以上版本。
  • matplotlib繪圖邏輯(上)
    matplotlib繪圖邏輯(上)matplotlib是一個基於Python的繪圖庫,具有對2D的完全支持和對3D圖形的有限支持,在Python科學計算社區中廣泛使用。本文對matplotblib的基本繪圖邏輯進行了比較詳細的梳理。寫作過程中參考了很多資料,由於筆記是斷續的,有些可能忘記引用,在此表達感謝。
  • PyCharm安裝matplotlib教程——安裝好matplotlib但是import報錯
    輸入python -m pip install -U pip setuptools2.輸入python -m pip install matplotlib3.檢查是否已經安裝成功。輸入python -m pip list成功安裝。默認安裝在D:\Python\Lib\site-packages方式二:通過下載matplotlib進行安裝。