天天看點

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

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

那學 matplotlib 庫有什麼用?答案是:可以節約搜尋時間。掌握 matplotlib 的速查表并了解其基本接口,根據個性需求從衆多資源中編輯我們的繪圖,從長期來看會節約很多的時間。

大部分内容取自以下 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_Python Matplotlib 繪圖使用指南 (附代碼)

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

一個有趣的現象。為什麼引用庫總采用 import matplotlib.pyplot as plt 的方式呢?

因為使用例如 pylab import * 或者 %pylab 是一個非常不好的方式,matplotlib 官方不建議這樣使用,具體原因如下:

由于曆史原因,from pylab import * 仍然存在,但是強烈建議不要這樣使用。這樣做會遮蔽 Python 的内置函數進而占用命名空間,導緻難以追蹤的 bugs。想要實作零輸入獲得 IPython 內建,推薦使用 %matplotlib 指令。來源:https://matplotlib.org/users/shell.html#using-matplotlib-in-a-python-shell

使用 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_Python Matplotlib 繪圖使用指南 (附代碼)

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

python怎麼用matplotlib_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_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_Python Matplotlib 繪圖使用指南 (附代碼)

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

4.繪圖的基本例子

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

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)
python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

總結上面的例子:

我們建立 1 行和 2 列的圖形。即,1 行和 2 列中的 2 個 axes 對象。

我們分别自定義 ax1 和 ax2。可以看到,我們可以将 Y-ticks 移動到右邊的第二圖形中。

5.二維網格的繪制

subplot2grid

需要做什麼?

觀察下面的繪圖格式。

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

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

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)
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_Python Matplotlib 繪圖使用指南 (附代碼)
python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

7.線條樣式和線條寬度

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

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)
python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

8.基本的資料分布

EDA 過程中的必要操作。

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

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

熱像圖(顔色網格圖)和等高線圖在很多情況下都有助于可視化 2D 資料。

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

10.圖像的調整、修改邊緣坐标和标度

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

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

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)
python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

需要注意的事情:

填充(padding)自動設定 X 軸或 Y 軸網格标度

我們可以使用 xlim,ylim 設定 x,y 的刻度限制

12.技巧

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)
python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

13.軸線

python怎麼用matplotlib_Python Matplotlib 繪圖使用指南 (附代碼)

14.結束

部落格原址: https://www.kaggle.com/grroverpr/matplotlib-plotting-guide/notebook