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


目錄

前言

學習matplotlib有一段時間了,總感覺學不到本質的東西,抓不到主要的重點,還是感覺有些吃力,畫的圖千變萬化,總不能一一學會吧,今天我們就來總結一下,matplotlib本質的東西,讓我們更能在全局上掌握matplotlib庫。

(一)總框架分析

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

  1. 方法一:函數式繪圖
  2. 方法二:面向對象式繪圖

(二)函數式的繪圖

1.說明:

在matplotlib.pyplot里是封裝好的函數,用戶可以直接調用函數進行繪圖。

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

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

  1. 操作類的函數:對於畫布,圖,子圖,坐標軸,圖例,背景,網格等的操作。

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

  1. 繪圖類的函數:畫折線圖,散點圖,條形圖,直方圖,餅狀圖等特點圖的繪制函數。

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

具體可以參考官方網站

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

2.函數繪圖的缺優點

(1)缺點:

其實函數式的繪圖本質上還是在matplotlib對象的封裝,在對象的基礎上多了一層函數的調用,

其定制性並不是很強,都是封裝好的函數。

(2)優點:

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

新手容易上手,不需要了解內部的對象問題。

3.繪圖類的函數

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

序號 繪圖函數(plt.xxx) 說明
1 acorr() 繪制x的自相關圖
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() 繪制包含日期的數據圖
21 quiver() 繪制一個二維箭頭場圖
22 scatter() 繪制散點圖
23 specgram() 繪制頻譜圖
24 stackplot() 繪制堆積區域圖
25 streamplot() 繪制矢量流的流線型圖
26 triplot() 繪制非結構化三角形網格作為線條圖

4.操作類的函數

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

序號 操作函數(plt.xxx) 說明
1 arrow() 向軸添加箭頭
2 axes() 控制軸的范圍
3 axhline() 在軸上添加水平線
4 axhspan() 在軸上添加水平跨度(矩形)
5 axvline() 在軸上添加垂直線
6 axvspan() 在軸上添加垂直跨度(矩形)
7 box() 打開或關閉軸框
8 figlegend() 在圖中放置一個圖例
9 figtext() 添加文字到圖
10 grid() 配置網格線
11 legend() 在軸上放置圖例
12 locator_params() 控制軸的刻度緊密度。
13 loglog() 在x軸和y軸上繪制具有對數縮放的繪圖
14 margins() 設置繪圖到框的邊距
15 minorticks_on() 在軸上顯示次要刻度
16 minorticks_off() 從軸上移除次要刻度
17 subplot() 在當前圖中添加子圖
18 subplot2grid() 在常規網格內的特定位置創建軸
19 subplots() 創建一個圖形和一組子圖
20 subplots_adjust() 調整子圖布局
21 suptitle() 為圖中添加居中標題
22 table() 將表添加到當前軸
23 text() 向軸添加文本
24 tick_params() 更改刻度,刻度標簽和網格線的外觀
25 title() 設置軸的標題
26 twinx() 制作共享x軸的第二
27 twiny() 制作共享y軸的第二個軸
28 xlabel() 設置x軸的標簽
29 xlim() 獲取或設置當前軸的x限制
30 xscale() 設置x軸刻度
31 xticks() 獲取或設置當前刻度線位置和x軸標簽
32 ylabel() 設置y軸的標簽
33 ylim() 獲取或設置當前軸的y限制
34 yscale() 設置y軸刻度
35 yticks() 獲取或設置y軸的當前刻度位置和標簽

5.例子:

(1)源代碼

# 導入模塊
import matplotlib.pyplot as plt
import numpy as np

# 數據
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2)

# 繪圖
plt.plot(x, y)

# 顯示
plt.show()

(2)顯示效果

03.png

(三)面向對象式的繪圖

1.基本概念

面向對象式的繪圖,才是matplotlib繪圖最自然的方式,不過需要先了解一些基本的概念。

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

下圖是matplotlib基本的組成部分

image

figure(圖形)

axes(子圖形)

title(標題)

legend(圖例)

Major tick(大標尺刻度)

Minor tick(小標尺刻度)

Major tick label(大標尺刻度數值)

Minor tick label(小標尺刻度數值)

Y axis label(y軸指標說明)

X axis label(x軸指標說明)

Line(線型圖)

Markers(數據標注點)

Grid(格子)等等

2.基本對象

(1)Figure

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

(2)Axes

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

(3)Axis

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

(4)Artist

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

層級結構圖:

02.png

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

3.面向對象式繪圖的缺優

(1)缺點:

對於新手不友好,感念混淆,不易掌握,上手慢。

(2)優點:

可定制性強,靈活,自然,流暢。

4.例子:

(1)源代碼

# 導入模塊
import matplotlib.pyplot as plt
import numpy as np

# 數據
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2)

# 創建一張圖
fig, ax = plt.subplots(1, 1)

plt.plot(x, y)

# 顯示
plt.show()

(2)輸出效果

[圖片上傳失敗...(image-66cc5e-1552302327631)]

參考網站

【1】python matplotlib畫圖教程學習:使用介紹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 周一


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM