Python Matplotlib 繪圖使用指南

姓名:張安琪 ?學號:17021211235

轉(zhuǎn)載自:https://www.leiphone.com/news/201805/9ZrBlCe5uLr3o9tL.html,有刪節(jié)。

【嵌牛導讀】:matplotlib 是一個基于 Python 的 2D 繪圖庫

【嵌牛鼻子】:Python Matplotlib 繪圖

【嵌牛提問】:如何使用Python Matplotlib繪圖?

【嵌牛正文】:

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

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

大部分內(nèi)容取自以下 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

matplotlib?是一個基于 Python 的 2D 繪圖庫,其可以在跨平臺的在各種硬拷貝格式和交互式環(huán)境中繪制出高圖形。

一個有趣的現(xiàn)象。為什么引用庫總采用 import matplotlib.pyplot as plt 的方式呢?

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

由于歷史原因,from pylab import *?仍然存在,但是強烈建議不要這樣使用。這樣做會遮蔽 Python 的內(nèi)置函數(shù)進而占用命名空間,導致難以追蹤的 bugs。想要實現(xiàn)零輸入獲得 IPython 集成,推薦使用?%matplotlib 命令。來源https://matplotlib.org/users/shell.html#using-matplotlib-in-a-python-shell

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

1.內(nèi)聯(lián)繪圖和 % matplotlib?

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

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

彈出窗口和交互界面: %matplotlib qt 和 %matplot tk

非交互式內(nèi)聯(lián)繪圖: %matplotlib inline

交互式內(nèi)聯(lián)繪圖: %matplotlib notebook-->別用這個,它會讓開關變得困難。

2.理解 matplotlib 對象結(jié)構

pyplot 是一個 matplotlib 面向?qū)ο蟮暮瘮?shù)接口。

plt.gca()

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

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

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

Setter 和 Getter

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

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

2. 我們可以直接使用?plt.bla()?調(diào)用當前 axis(其中,bla 可以是 title(),legend(),xlabel()等)。這是 matlibplot 面向?qū)ο蟮囊环N函數(shù)。這個函數(shù)讓修改當前的 axes 變得容易。比 1 的方法更常用。

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

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

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

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

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

3.matplotlib 圖像剖析

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

4.繪圖的基本例子

如何作圖的基本例子,涵蓋面向?qū)ο罄L圖的各個方面。請仔細閱讀。

總結(jié)上面的例子:

我們創(chuàng)建 1 行和 2 列的圖形。即,1 行和 2 列中的 2 個 axes 對象。

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

5.二維網(wǎng)格的繪制

subplot2grid

需要做什么?

觀察下面的繪圖格式。

思路是把上面的圖形考慮成為?2x4?網(wǎng)格。然后將多個網(wǎng)格分配給單個圖以容納所需的圖形。

重點:

我們可以使用 subplot2grid 定制我們的繪圖布局。

我們可以用 plt.figure() 創(chuàng)建無 axes 對象的圖形,然后手動添加 axes 對象。

我們可以使用 fig.suptitle() 來設置整個圖形的總標題。

6.顏色,顏色條,RGB 數(shù)組和顏色圖譜

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

7.線條樣式和線條寬度

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

8.基本的數(shù)據(jù)分布

EDA 過程中的必要操作。

9.二維數(shù)組的等高線圖和顏色網(wǎng)格圖

熱像圖(顏色網(wǎng)格圖)和等高線圖在很多情況下都有助于可視化 2D 數(shù)據(jù)。

10.圖像的調(diào)整、修改邊緣坐標和標度

最后調(diào)整細節(jié),讓繪圖變得更好看。

11.標度的限制和自動調(diào)整

需要注意的事情:

填充(padding)自動設置 X 軸或 Y 軸網(wǎng)格標度

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

12.技巧

13.軸線

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容