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

目錄

[TOC]

前言

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

(一)總框架分析

在matplotlib庫里,總分成兩種繪圖方法

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

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

1.說明:

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

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

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

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

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

  1. 繪圖類的函數(shù):畫折線圖,散點圖,條形圖,直方圖,餅狀圖等特點圖的繪制函數(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)點

(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() 繪制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() 繪制一個二維箭頭場圖
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)顯示效果

03.png

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

1.基本概念

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

可參考官方介紹: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)說明)

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

Line(線型圖)

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

Grid(格子)等等

2.基本對象

(1)Figure

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

(2)Axes

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

(3)Axis

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

(4)Artist

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

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

02.png

(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

作者:Mark

日期:2019/03/11 周一

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

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