Python Matplotlib 繪圖使用指南

大多數人不會花大量時間去學matplotlib 庫,仍然可以實現繪圖需求,因為已經有人在 stackoverflow、github 等開源平臺上提供了絕大多數畫圖問題的解決方案。我們通常會使用 google 來完成繪圖需求。至少我是這樣。

大部分內容取自以下 2 個鏈接,建議也去閱讀一下。

https://realpython.com/python-matplotlib-guide/#why-can-matplotlib-be-confusing

https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Python_Matplotlib_Cheat_Sheet.pdf

Python Matplotlib 繪圖使用指南

matplotlib 是一個基於 Python 的 2D 繪圖庫,其可以在跨平臺的在各種硬拷貝格式和交互式環境中繪製出高圖形。

  • 一個有趣的現象。為什麼引用庫總採用 import matplotlib.pyplot as plt 的方式呢? 因為使用例如 pylab import * 或者 %pylab 是一個非常不好的方式,matplotlib 官方不建議這樣使用,具體原因如下:

使用 matplotlib 繪製不同類型的圖像是很容易的,有很多文檔和教程。最重要的是,瞭解最佳的繪圖方式。如何使用 axes,subplots 等。這篇文章主要針對這些問題。

1.內聯繪圖和 % matplotlib

%matplotlib 命令可以在當前的 Notebook 中啟用繪圖。這個命令提供一個可選參數,指定使用哪個 matplotlib 後端。絕大多數情況下,Notebook 中都是使用inline 後臺,它可以在 Notebook 中嵌入繪圖。另一個選項是qt 後臺,它在側窗口打中打開 Matplotlib 交互 UI 。

Matlibplot 提供了多種繪圖 UI ,可進行如下分類 :

  • 彈出窗口和交互界面: %matplotlib qt 和 %matplot tk
  • 非交互式內聯繪圖: %matplotlib inline
  • 交互式內聯繪圖: %matplotlib notebook-->別用這個,它會讓開關變得困難。

2.理解 matplotlib 對象結構

pyplot 是一個 matplotlib 面向對象的函數接口。

plt.gca()

它返回當前 plot() 關聯的軸

Python Matplotlib 繪圖使用指南

如果不使用plt.close(),則會顯示出空的圖形。因為在開始時使用了inline 命令。

Python Matplotlib 繪圖使用指南

axis_id 仍然是相同的,但是當我們移動到另一個 Notebook 塊時,plt.gca() 會發生變化。

Setter 和 Getter

Getter 和 Setter 方法用於捕獲當前或任意 axies 以及對其進行修改。我們可能需要修改標題、顏色、圖列、字體等。有兩種方法:

1. 使用 fig.axes[i] 指定要抓取的 axes,使用 setter 的 getter 對 axies 對象進行調用。在上面的例子中,只有一個 axes,所以我們調用 axes[0]。

2. 我們可以直接使用 plt.bla()調用當前 axis(其中,bla 可以是 title(),legend(),xlabel()等)。這是 matlibplot 面向對象的一種函數。這個函數讓修改當前的 axes 變得容易。比 1 的方法更常用。

Python Matplotlib 繪圖使用指南

當我們使用axes[i] 時,我們可以調用任何之前的代碼塊中的任何 axes 對象,但是調用plt.bla(),會在每個代碼塊中創建新的 axes 對象,並只調用當前對象。因此,上面例子中,只在plt.title() 被調用時,才創建新plt 對象。

重要觀察:我們通常在當前 axis 對象上調用 plt.bla(),這種語法使得每個代碼塊中的 axis 對象都是新創建的。但是通過調用fig.axes[0],我們也可以從任何代碼塊中處理之前的 axes 對象。

這是 stateless(object oriented) 方法,並可以自定義,當圖像變得複雜時,這樣做很方便。

所以,我建議是使用fig,ax = plt.subplots(_) 先解壓 axes 和 figure,並給它們分配給一個新的變量。然後,可以對這些變量使用 Getter 和 Setter 方法進行繪圖中的更改。此外,這使得我們能夠在多個 axes 上做工作,而不是隻在一個當前 axes 上。pyplot 使用 1 次創建子圖,然後使用 OO 方法。

結論:從現在開始,我使用 plt.subpots() 來完成不同的繪圖。(如果有人認為這個觀點是錯誤的,請糾正我)

3.matplotlib 圖像剖析

Python Matplotlib 繪圖使用指南

來自: https://matplotlib.org/faq/usage_faq.html

4.繪圖的基本例子

如何作圖的基本例子,涵蓋面向對象繪圖的各個方面。請仔細閱讀。

Python Matplotlib 繪圖使用指南

Python Matplotlib 繪圖使用指南

總結上面的例子:

  • 我們創建 1 行和 2 列的圖形。即,1 行和 2 列中的 2 個 axes 對象。
  • 我們分別自定義 ax1 和 ax2。可以看到,我們可以將 Y-ticks 移動到右邊的第二圖形中。

5.二維網格的繪製

subplot2grid

需要做什麼?

觀察下面的繪圖格式。

Python Matplotlib 繪圖使用指南

思路是把上面的圖形考慮成為2x4網格。然後將多個網格分配給單個圖以容納所需的圖形。

Python Matplotlib 繪圖使用指南

Python Matplotlib 繪圖使用指南

重點:

  • 我們可以使用 subplot2grid 定製我們的繪圖佈局。
  • 我們可以用 plt.figure() 創建無 axes 對象的圖形,然後手動添加 axes 對象。
  • 我們可以使用 fig.suptitle() 來設置整個圖形的總標題。

6.顏色,顏色條,RGB 數組和顏色圖譜

我們已經介紹了 ax.plot(),ax.scatter(),ax.bar() 和 ax.hist() 等基本圖形操作,另一個更常用的函數是 ax.imshow(),它用來顯示彩色圖或圖像/RGB 數組。

Python Matplotlib 繪圖使用指南

Python Matplotlib 繪圖使用指南

Python Matplotlib 繪圖使用指南

7.線條樣式和線條寬度

改變線條寬度、顏色或風格。

Python Matplotlib 繪圖使用指南

Python Matplotlib 繪圖使用指南

8.基本的數據分佈

EDA 過程中的必要操作。

Python Matplotlib 繪圖使用指南

9.二維數組的等高線圖和顏色網格圖

熱像圖(顏色網格圖)和等高線圖在很多情況下都有助於可視化 2D 數據。

Python Matplotlib 繪圖使用指南

10.圖像的調整、修改邊緣座標和標度

最後調整細節,讓繪圖變得更好看。

11.標度的限制和自動調整

Python Matplotlib 繪圖使用指南

Python Matplotlib 繪圖使用指南

需要注意的事情:

  • 填充(padding)自動設置 X 軸或 Y 軸網格標度
  • 我們可以使用 xlim,ylim 設置 x,y 的刻度限制

12.技巧

Python Matplotlib 繪圖使用指南

Python Matplotlib 繪圖使用指南

13.軸線

Python Matplotlib 繪圖使用指南

14.結束


分享到:


相關文章: