目錄
[TOC]
前言
學(xué)習(xí)matplotlib有一段時間了,總感覺學(xué)不到本質(zhì)的東西,抓不到主要的重點,還是感覺有些吃力,畫的圖千變?nèi)f化,總不能一一學(xué)會吧,今天我們就來總結(jié)一下,matplotlib本質(zhì)的東西,讓我們更能在全局上掌握matplotlib庫。
(一)總框架分析
在matplotlib庫里,總分成兩種繪圖方法
- 方法一:函數(shù)式繪圖
- 方法二:面向?qū)ο笫嚼L圖
(二)函數(shù)式的繪圖
1.說明:
在matplotlib.pyplot里是封裝好的函數(shù),用戶可以直接調(diào)用函數(shù)進行繪圖。
一般的,我們約定 matplotlib.pyplot 取別名為 plt
其模塊下主要定義如下兩方面的函數(shù):
- 操作類的函數(shù):對于畫布,圖,子圖,坐標(biāo)軸,圖例,背景,網(wǎng)格等的操作。
如:plt.ylabel(), plt.xlabel(), plot.yscale(), plt.legend(), plt.title(), plt.text()……
- 繪圖類的函數(shù):畫折線圖,散點圖,條形圖,直方圖,餅狀圖等特點圖的繪制函數(shù)。
如:plt.scatter, plt.plot(), plt.bar, plot.pie(), plt.hise()……
具體可以參考官方網(wǎng)站
2.函數(shù)繪圖的缺優(yōu)點
(1)缺點:
其實函數(shù)式的繪圖本質(zhì)上還是在matplotlib對象的封裝,在對象的基礎(chǔ)上多了一層函數(shù)的調(diào)用,
其定制性并不是很強,都是封裝好的函數(shù)。
(2)優(yōu)點:
適合一般用戶繪圖,要求不是很高,定制性不是很強的繪圖。
新手容易上手,不需要了解內(nèi)部的對象問題。
3.繪圖類的函數(shù)
matplotlib繪圖不止這些,在此只舉例了大部分
| 序號 | 繪圖函數(shù)(plt.xxx) | 說明 |
|---|---|---|
| 1 | acorr() |
繪制x的自相關(guān)圖 |
| 2 | angle_spectrum() |
繪制角度譜圖 |
| 3 | bar() |
制作條形圖 |
| 4 | barbs() |
繪制倒鉤的二維場圖 |
| 5 | barh() |
制作水平條形圖。 |
| 6 | boxplot() |
制作一個盒子和胡須圖 |
| 7 | broken_barh() |
繪制一個水平的矩形序列圖 |
| 8 | clabel() |
繪制等高線圖 |
| 9 | cohere() |
繪制x和y之間的一致性圖 |
| 10 | csd() |
繪制交叉譜密度圖 |
| 11 | eventplot() |
繪制相同的平行線 |
| 12 | fill() |
繪制填充多邊形圖 |
| 13 | hexbin() |
制作六邊形分箱圖 |
| 14 | hist() |
繪制直方圖 |
| 15 | hist2d() |
制作2D直方圖 |
| 16 | magnitude_spectrum() |
繪制幅度譜圖 |
| 17 | phase_spectrum() |
繪制相位譜圖 |
| 18 | pie() |
繪制餅圖 |
| 19 | plot() |
繪制折線圖 |
| 20 | plot_date() |
繪制包含日期的數(shù)據(jù)圖 |
| 21 | quiver() |
繪制一個二維箭頭場圖 |
| 22 | scatter() |
繪制散點圖 |
| 23 | specgram() |
繪制頻譜圖 |
| 24 | stackplot() |
繪制堆積區(qū)域圖 |
| 25 | streamplot() |
繪制矢量流的流線型圖 |
| 26 | triplot() |
繪制非結(jié)構(gòu)化三角形網(wǎng)格作為線條圖 |
4.操作類的函數(shù)
操作不止這些,在這只是例了大部分
| 序號 | 操作函數(shù)(plt.xxx) | 說明 |
|---|---|---|
| 1 | arrow() |
向軸添加箭頭 |
| 2 | axes() |
控制軸的范圍 |
| 3 | axhline() |
在軸上添加水平線 |
| 4 | axhspan() |
在軸上添加水平跨度(矩形) |
| 5 | axvline() |
在軸上添加垂直線 |
| 6 | axvspan() |
在軸上添加垂直跨度(矩形) |
| 7 | box() |
打開或關(guān)閉軸框 |
| 8 | figlegend() |
在圖中放置一個圖例 |
| 9 | figtext() |
添加文字到圖 |
| 10 | grid() |
配置網(wǎng)格線 |
| 11 | legend() |
在軸上放置圖例 |
| 12 | locator_params() |
控制軸的刻度緊密度。 |
| 13 | loglog() |
在x軸和y軸上繪制具有對數(shù)縮放的繪圖 |
| 14 | margins() |
設(shè)置繪圖到框的邊距 |
| 15 | minorticks_on() |
在軸上顯示次要刻度 |
| 16 | minorticks_off() |
從軸上移除次要刻度 |
| 17 | subplot() |
在當(dāng)前圖中添加子圖 |
| 18 | subplot2grid() |
在常規(guī)網(wǎng)格內(nèi)的特定位置創(chuàng)建軸 |
| 19 | subplots() |
創(chuàng)建一個圖形和一組子圖 |
| 20 | subplots_adjust() |
調(diào)整子圖布局 |
| 21 | suptitle() |
為圖中添加居中標(biāo)題 |
| 22 | table() |
將表添加到當(dāng)前軸 |
| 23 | text() |
向軸添加文本 |
| 24 | tick_params() |
更改刻度,刻度標(biāo)簽和網(wǎng)格線的外觀 |
| 25 | title() |
設(shè)置軸的標(biāo)題 |
| 26 | twinx() |
制作共享x軸的第二個軸 |
| 27 | twiny() |
制作共享y軸的第二個軸 |
| 28 | xlabel() |
設(shè)置x軸的標(biāo)簽 |
| 29 | xlim() |
獲取或設(shè)置當(dāng)前軸的x限制 |
| 30 | xscale() |
設(shè)置x軸刻度 |
| 31 | xticks() |
獲取或設(shè)置當(dāng)前刻度線位置和x軸標(biāo)簽 |
| 32 | ylabel() |
設(shè)置y軸的標(biāo)簽 |
| 33 | ylim() |
獲取或設(shè)置當(dāng)前軸的y限制 |
| 34 | yscale() |
設(shè)置y軸刻度 |
| 35 | yticks() |
獲取或設(shè)置y軸的當(dāng)前刻度位置和標(biāo)簽 |
5.例子:
(1)源代碼
# 導(dǎo)入模塊
import matplotlib.pyplot as plt
import numpy as np
# 數(shù)據(jù)
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2)
# 繪圖
plt.plot(x, y)
# 顯示
plt.show()
(2)顯示效果

(三)面向?qū)ο笫降睦L圖
1.基本概念
面向?qū)ο笫降睦L圖,才是matplotlib繪圖最自然的方式,不過需要先了解一些基本的概念。
可參考官方介紹:https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py
下圖是matplotlib基本的組成部分

figure(圖形)
axes(子圖形)
title(標(biāo)題)
legend(圖例)
Major tick(大標(biāo)尺刻度)
Minor tick(小標(biāo)尺刻度)
Major tick label(大標(biāo)尺刻度數(shù)值)
Minor tick label(小標(biāo)尺刻度數(shù)值)
Y axis label(y軸指標(biāo)說明)
X axis label(x軸指標(biāo)說明)
Line(線型圖)
Markers(數(shù)據(jù)標(biāo)注點)
Grid(格子)等等
2.基本對象
(1)Figure
- 整個圖形即是一個Figure對象,即一個彈出的繪圖的窗口,便是一個figure。
- Figure對象至少包含一個子圖,也就是Axes對象。
- Figure對象包含一些特殊的Artist對象,如title標(biāo)題、圖例legend。
- Figure對象包含畫布canvas對象。 canvas對象一般不可見,通常無需直接操作該對象,matplotlib程序?qū)嶋H繪圖時需要調(diào)用該對象。
(2)Axes
- 字面上理解,axes是數(shù)據(jù)軸axis的復(fù)數(shù),但它并不是指數(shù)據(jù)軸,而是子圖對象。可以這樣理解,每一個子圖都有x和y軸,axes則用于代表這兩個數(shù)據(jù)軸所對應(yīng)的一個子圖對象。
- 常用方法set_xlim()以及set_ylim():
- 設(shè)置子圖x軸和y軸對應(yīng)的數(shù)據(jù)范圍。
- set_title():設(shè)置子圖的標(biāo)題。
- set_xlabel()以及set_ylable():
- 設(shè)置子圖x軸和y軸指標(biāo)的描述說明。
(3)Axis
- Axis是數(shù)據(jù)軸對象,主要用于控制數(shù)據(jù)軸上刻度位置和顯示數(shù)值。
- Axis有Locator和Formatter兩個子對象,分別用于控制刻度位置和顯示數(shù)值。
(4)Artist
- 基本上所有的對象都是一個Artist對象,包括Figure對象、Axes對象和Axis對象,可以將Artist理解為一個基本類。
- 當(dāng)提交代碼,圖像最終呈現(xiàn)時,所有的artist對象都會繪制于canvas畫布上
層級結(jié)構(gòu)圖:

(yaxis同樣有tick, label和tick label,沒有畫出)
3.面向?qū)ο笫嚼L圖的缺優(yōu)
(1)缺點:
對于新手不友好,感念混淆,不易掌握,上手慢。
(2)優(yōu)點:
可定制性強,靈活,自然,流暢。
4.例子:
(1)源代碼
# 導(dǎo)入模塊
import matplotlib.pyplot as plt
import numpy as np
# 數(shù)據(jù)
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2)
# 創(chuàng)建一張圖
fig, ax = plt.subplots(1, 1)
plt.plot(x, y)
# 顯示
plt.show()
(2)輸出效果
[圖片上傳失敗...(image-66cc5e-1552302327631)]
參考網(wǎng)站
【1】python matplotlib畫圖教程學(xué)習(xí):使用介紹https://baijiahao.baidu.com/s?id=1614559225877861604&wfr=spider&for=pc
【2】matplotlib核心剖析:https://blog.csdn.net/zchshhh/article/details/78215646