目錄
[TOC]
前言
學習matplotlib有一段時間了章钾,總感覺學不到本質(zhì)的東西穿铆,抓不到主要的重點,還是感覺有些吃力实牡,畫的圖千變?nèi)f化陌僵,總不能一一學會吧,今天我們就來總結(jié)一下创坞,matplotlib本質(zhì)的東西碗短,讓我們更能在全局上掌握matplotlib庫。
(一)總框架分析
在matplotlib庫里题涨,總分成兩種繪圖方法
- 方法一:函數(shù)式繪圖
- 方法二:面向?qū)ο笫嚼L圖
(二)函數(shù)式的繪圖
1.說明:
在matplotlib.pyplot里是封裝好的函數(shù)偎谁,用戶可以直接調(diào)用函數(shù)進行繪圖。
一般的纲堵,我們約定 matplotlib.pyplot 取別名為 plt
其模塊下主要定義如下兩方面的函數(shù):
- 操作類的函數(shù):對于畫布巡雨,圖,子圖席函,坐標軸铐望,圖例,背景茂附,網(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() |
在當前圖中添加子圖 |
18 | subplot2grid() |
在常規(guī)網(wǎng)格內(nèi)的特定位置創(chuàng)建軸 |
19 | subplots() |
創(chuàng)建一個圖形和一組子圖 |
20 | subplots_adjust() |
調(diào)整子圖布局 |
21 | suptitle() |
為圖中添加居中標題 |
22 | table() |
將表添加到當前軸 |
23 | text() |
向軸添加文本 |
24 | tick_params() |
更改刻度纵刘,刻度標簽和網(wǎng)格線的外觀 |
25 | title() |
設(shè)置軸的標題 |
26 | twinx() |
制作共享x軸的第二個軸 |
27 | twiny() |
制作共享y軸的第二個軸 |
28 | xlabel() |
設(shè)置x軸的標簽 |
29 | xlim() |
獲取或設(shè)置當前軸的x限制 |
30 | xscale() |
設(shè)置x軸刻度 |
31 | xticks() |
獲取或設(shè)置當前刻度線位置和x軸標簽 |
32 | ylabel() |
設(shè)置y軸的標簽 |
33 | ylim() |
獲取或設(shè)置當前軸的y限制 |
34 | yscale() |
設(shè)置y軸刻度 |
35 | yticks() |
獲取或設(shè)置y軸的當前刻度位置和標簽 |
5.例子:
(1)源代碼
# 導入模塊
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(標題)
legend(圖例)
Major tick(大標尺刻度)
Minor tick(小標尺刻度)
Major tick label(大標尺刻度數(shù)值)
Minor tick label(小標尺刻度數(shù)值)
Y axis label(y軸指標說明)
X axis label(x軸指標說明)
Line(線型圖)
Markers(數(shù)據(jù)標注點)
Grid(格子)等等
2.基本對象
(1)Figure
- 整個圖形即是一個Figure對象,即一個彈出的繪圖的窗口鞍历,便是一個figure舵抹。
- Figure對象至少包含一個子圖,也就是Axes對象劣砍。
- Figure對象包含一些特殊的Artist對象惧蛹,如title標題、圖例legend刑枝。
- Figure對象包含畫布canvas對象香嗓。 canvas對象一般不可見,通常無需直接操作該對象装畅,matplotlib程序?qū)嶋H繪圖時需要調(diào)用該對象陶缺。
(2)Axes
- 字面上理解,axes是數(shù)據(jù)軸axis的復數(shù)洁灵,但它并不是指數(shù)據(jù)軸饱岸,而是子圖對象』涨В可以這樣理解苫费,每一個子圖都有x和y軸,axes則用于代表這兩個數(shù)據(jù)軸所對應(yīng)的一個子圖對象双抽。
- 常用方法set_xlim()以及set_ylim():
- 設(shè)置子圖x軸和y軸對應(yīng)的數(shù)據(jù)范圍百框。
- set_title():設(shè)置子圖的標題。
- set_xlabel()以及set_ylable():
- 設(shè)置子圖x軸和y軸指標的描述說明牍汹。
(3)Axis
- Axis是數(shù)據(jù)軸對象铐维,主要用于控制數(shù)據(jù)軸上刻度位置和顯示數(shù)值柬泽。
- Axis有Locator和Formatter兩個子對象,分別用于控制刻度位置和顯示數(shù)值嫁蛇。
(4)Artist
- 基本上所有的對象都是一個Artist對象锨并,包括Figure對象、Axes對象和Axis對象睬棚,可以將Artist理解為一個基本類第煮。
- 當提交代碼,圖像最終呈現(xiàn)時抑党,所有的artist對象都會繪制于canvas畫布上
層級結(jié)構(gòu)圖:
(yaxis同樣有tick, label和tick label包警,沒有畫出)
3.面向?qū)ο笫嚼L圖的缺優(yōu)
(1)缺點:
對于新手不友好,感念混淆底靠,不易掌握害晦,上手慢。
(2)優(yōu)點:
可定制性強暑中,靈活壹瘟,自然,流暢痒芝。
4.例子:
(1)源代碼
# 導入模塊
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畫圖教程學習:使用介紹https://baijiahao.baidu.com/s?id=1614559225877861604&wfr=spider&for=pc
【2】matplotlib核心剖析:https://blog.csdn.net/zchshhh/article/details/78215646