4.7Python數(shù)據(jù)處理篇之Matplotlib系列(七)---matplotlib原理分析

目錄

[TOC]

前言

學(xué)習(xí)matplotlib有一段時(shí)間了,總感覺學(xué)不到本質(zhì)的東西,抓不到主要的重點(diǎn),還是感覺有些吃力,畫的圖千變?nèi)f化,總不能一一學(xué)會(huì)吧,今天我們就來(lái)總結(jié)一下,matplotlib本質(zhì)的東西,讓我們更能在全局上掌握matplotlib庫(kù)。

(一)總框架分析

在matplotlib庫(kù)里,總分成兩種繪圖方法

  1. 方法一:函數(shù)式繪圖
  2. 方法二:面向?qū)ο笫嚼L圖

(二)函數(shù)式的繪圖

1.說(shuō)明:

在matplotlib.pyplot里是封裝好的函數(shù),用戶可以直接調(diào)用函數(shù)進(jìn)行繪圖。

一般的,我們約定 matplotlib.pyplot 取別名為 plt

其模塊下主要定義如下兩方面的函數(shù):

  1. 操作類的函數(shù):對(duì)于畫布,圖,子圖,坐標(biāo)軸,圖例,背景,網(wǎng)格等的操作。

如:plt.ylabel(), plt.xlabel(), plot.yscale(), plt.legend(), plt.title(), plt.text()……

  1. 繪圖類的函數(shù):畫折線圖,散點(diǎn)圖,條形圖,直方圖,餅狀圖等特點(diǎn)圖的繪制函數(shù)。

如:plt.scatter, plt.plot(), plt.bar, plot.pie(), plt.hise()……

具體可以參考官方網(wǎng)站

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html?highlight=matplotlib%20pyplot#module-matplotlib.pyplot

2.函數(shù)繪圖的缺優(yōu)點(diǎn)

(1)缺點(diǎn):

其實(shí)函數(shù)式的繪圖本質(zhì)上還是在matplotlib對(duì)象的封裝,在對(duì)象的基礎(chǔ)上多了一層函數(shù)的調(diào)用,

其定制性并不是很強(qiáng),都是封裝好的函數(shù)。

(2)優(yōu)點(diǎn):

適合一般用戶繪圖,要求不是很高,定制性不是很強(qiáng)的繪圖。

新手容易上手,不需要了解內(nèi)部的對(duì)象問(wèn)題。

3.繪圖類的函數(shù)

matplotlib繪圖不止這些,在此只舉例了大部分

序號(hào) 繪圖函數(shù)(plt.xxx) 說(shuō)明
1 acorr() 繪制x的自相關(guān)圖
2 angle_spectrum() 繪制角度譜圖
3 bar() 制作條形圖
4 barbs() 繪制倒鉤的二維場(chǎng)圖
5 barh() 制作水平條形圖。
6 boxplot() 制作一個(gè)盒子和胡須圖
7 broken_barh() 繪制一個(gè)水平的矩形序列圖
8 clabel() 繪制等高線圖
9 cohere() 繪制xy之間的一致性圖
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() 繪制一個(gè)二維箭頭場(chǎng)圖
22 scatter() 繪制散點(diǎn)圖
23 specgram() 繪制頻譜圖
24 stackplot() 繪制堆積區(qū)域圖
25 streamplot() 繪制矢量流的流線型圖
26 triplot() 繪制非結(jié)構(gòu)化三角形網(wǎng)格作為線條圖

4.操作類的函數(shù)

操作不止這些,在這只是例了大部分

序號(hào) 操作函數(shù)(plt.xxx) 說(shuō)明
1 arrow() 向軸添加箭頭
2 axes() 控制軸的范圍
3 axhline() 在軸上添加水平線
4 axhspan() 在軸上添加水平跨度(矩形)
5 axvline() 在軸上添加垂直線
6 axvspan() 在軸上添加垂直跨度(矩形)
7 box() 打開或關(guān)閉軸框
8 figlegend() 在圖中放置一個(gè)圖例
9 figtext() 添加文字到圖
10 grid() 配置網(wǎng)格線
11 legend() 在軸上放置圖例
12 locator_params() 控制軸的刻度緊密度。
13 loglog() 在x軸和y軸上繪制具有對(duì)數(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)建一個(gè)圖形和一組子圖
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軸的第二個(gè)
27 twiny() 制作共享y軸的第二個(gè)軸
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)顯示效果

03.png

(三)面向?qū)ο笫降睦L圖

1.基本概念

面向?qū)ο笫降睦L圖,才是matplotlib繪圖最自然的方式,不過(guò)需要先了解一些基本的概念。

可參考官方介紹:https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

下圖是matplotlib基本的組成部分

image

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)說(shuō)明)

X axis label(x軸指標(biāo)說(shuō)明)

Line(線型圖)

Markers(數(shù)據(jù)標(biāo)注點(diǎn))

Grid(格子)等等

2.基本對(duì)象

(1)Figure

  1. 整個(gè)圖形即是一個(gè)Figure對(duì)象,即一個(gè)彈出的繪圖的窗口,便是一個(gè)figure。
  2. Figure對(duì)象至少包含一個(gè)子圖,也就是Axes對(duì)象。
  3. Figure對(duì)象包含一些特殊的Artist對(duì)象,如title標(biāo)題、圖例legend。
  4. Figure對(duì)象包含畫布canvas對(duì)象。 canvas對(duì)象一般不可見,通常無(wú)需直接操作該對(duì)象,matplotlib程序?qū)嶋H繪圖時(shí)需要調(diào)用該對(duì)象。

(2)Axes

  1. 字面上理解,axes是數(shù)據(jù)軸axis的復(fù)數(shù),但它并不是指數(shù)據(jù)軸,而是子圖對(duì)象??梢赃@樣理解,每一個(gè)子圖都有x和y軸,axes則用于代表這兩個(gè)數(shù)據(jù)軸所對(duì)應(yīng)的一個(gè)子圖對(duì)象。
  2. 常用方法set_xlim()以及set_ylim():
    1. 設(shè)置子圖x軸和y軸對(duì)應(yīng)的數(shù)據(jù)范圍。
    2. set_title():設(shè)置子圖的標(biāo)題。
    3. set_xlabel()以及set_ylable():
    4. 設(shè)置子圖x軸和y軸指標(biāo)的描述說(shuō)明。

(3)Axis

  1. Axis是數(shù)據(jù)軸對(duì)象,主要用于控制數(shù)據(jù)軸上刻度位置和顯示數(shù)值。
  2. Axis有Locator和Formatter兩個(gè)子對(duì)象,分別用于控制刻度位置和顯示數(shù)值。

(4)Artist

  1. 基本上所有的對(duì)象都是一個(gè)Artist對(duì)象,包括Figure對(duì)象、Axes對(duì)象和Axis對(duì)象,可以將Artist理解為一個(gè)基本類。
  2. 當(dāng)提交代碼,圖像最終呈現(xiàn)時(shí),所有的artist對(duì)象都會(huì)繪制于canvas畫布上

層級(jí)結(jié)構(gòu)圖:

02.png

(yaxis同樣有tick, label和tick label,沒有畫出)

3.面向?qū)ο笫嚼L圖的缺優(yōu)

(1)缺點(diǎn):

對(duì)于新手不友好,感念混淆,不易掌握,上手慢。

(2)優(yōu)點(diǎn):

可定制性強(qiáng),靈活,自然,流暢。

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

作者:Mark

日期:2019/03/11 周一

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

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