matplotlib基礎系統介紹
目錄
1. Matplotlib概述
2. 講解Matplotlib核心原理
3. Matplotlib相關基礎操作介紹
- 3.1 創建figure(畫布)的方式及完整繪圖步驟
- 3.2 線型設定
- 3.3 中文與特殊符號(負號)相關支持設定
- 3.4 圖例和網路的設定
- 3.5 坐標軸的設定
- 3.6 繪圖區域(坐標系)設定
1.Matplotlib概述
Matplotlib 是一個基于python 的繪圖庫,完全支持二維影像,有限支持三維圖形,Matplotlib是python編程語言及其資料科學擴展包NumPy的可視化操作界面庫,它利用通過的圖形用戶界面工具包(如Tkinter、wxPython 、Qt、FLTK、Cocoatoolkits或GTK+)向應用程式嵌入式繪圖提供了應用程式介面(API),此外,Matolotlib還有一個基于影像處理庫(如圖形庫OpenGL)的pylab介面,其設計與MATLAB非常類似,SciPy就是用Matplotlib進行圖形繪制,
2. 講解Matplotlib核心原理
想認識matplotlib繪圖的原理就必須清楚的理解figure(畫布)、axes(坐標系)、axis(坐標軸)三者之間的關系

類似畫畫,首先需要一張畫布,對于matplotlib相當于初始化了一張figure(畫布),然后一張畫布可以分配出不同的區域進行畫畫,相當于figure可以指定多個axes(坐標系),而在每個axes(坐標系)上繪圖,相當于每個axes(坐標系)中都有一個axis(坐標軸)
- 畫圖的實作

- matplotlib繪圖實作

3. Matplotlib相關基礎操作介紹
3.1創建figure(畫布)的方式及完整繪圖步驟
一、創建figure(畫布)的方式
- 隱式創建
- 顯示創建
①隱式創建figure物件
先觀察下面代碼
import matplotlib.pyplot as plt
x = [-1, 3, 5, 0]
y = [4, -9, 2, 8]
plt.plot(x, y)
plt.show()

看到上面的結果,可能會有疑問,在前面的敘述中,我們已經說過,想要使用matplotlib繪圖,必須先要創建一個figure(畫布)物件,可是上面的代碼并沒有創建,這是為什么呢?
- 這是因為在第一次執行plt.xxx()這句代碼時,系統就會自動地去判斷是否已經有了figure物件,如果沒有,系統會自動創建一個figure物件,并且在這個figure之上,自動創建一個axes坐標系,
注意:
1. 當我們只是繪制一個圖形時,那么直接plt.xxx(),系統會自動幫我創建一個figure物件和一個axes坐標系,
2.這也意味著如果我們不設定figure物件,那么一個figure物件上,只能有一個axes坐標系,即我們只能繪制一個圖形,
②顯式創建figure物件
- 對于不同的圖,想讓他分布在不同的圖上,那么就得用plt.figure進行設定,以plt.figure( )開頭,獲取每個axes(坐標系)
觀察下面基本創建代碼,后面會詳細介紹
import matplotlib.pyplot as plt
figure = plt.figure() # 創建figure(畫布)
figure.add_subplot(2,2,1)
figure.add_subplot(2,2,2)
figure.add_subplot(2,2,3)
figure.add_subplot(2,2,4)
plt.plot()
plt.show()

匯入資料之后的結果
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2,2,200)
y1 = 2 * x + 1
y2 = 2*x**2
y3 = 1/x
y4 = x ** 0.5
figure = plt.figure()
axes1 = figure.add_subplot(2,2,1)
axes2 = figure.add_subplot(2,2,2)
axes3 = figure.add_subplot(2,2,3)
axes4 = figure.add_subplot(2,2,4)
axes1.plot(x, y1)
axes2.plot(x, y2)
axes3.plot(x, y3)
axes4.plot(x, y4)
plt.show()
結果如下圖所示

二、完整的繪圖步驟
- 初步認識創建figure后,我了解基本的繪圖步驟
① 導庫
# 我們主要用的是matplotlib中的pyplot
import matplotlib.pyplot as plt
② 創建figure畫布物件
-
如果繪制一個簡單的小圖形,可以不設定figure物件,系統默認創建的figure物件,
-
如果需要繪制多個圖形,那么就必須創建figure物件并且得到每個位置上的axes物件,再對每個axes相應的位置進行繪制,
③ 根據figure物件進行布局設定
figure = plt.figure() #只有一個坐標系
figure.add_subplot(1, 1, 1)
plt.show()
figure = plt.figure() # 圖一
figure.add_subplot(1, 2, 1)
figure.add_subplot(1, 2, 2)
plt.show()
figure = plt.figure() # 圖二
figure.add_subplot(2, 2, 1)
figure.add_subplot(2, 2, 2)
figure.add_subplot(2, 2, 4)
plt.show()

根據上面代碼自行測驗得出規律
④ 獲取對應的axes坐標系物件
figure = plt.figure()
axes1 = figure.add_subplot(2,2,1)
axes2 = figure.add_subplot(2,2,2)
axes3 = figure.add_subplot(2,2,3)
axes4 = figure.add_subplot(2,2,4)
⑤ 對相應位置的圖形進行繪制
繪制圖形關鍵一步:傳入資料,并對繪制圖形的一些細節進行設定,如下例子,相關知識點后續會介紹;
x = np.linspace(-2, 2, 200)
y2 = 2 * x ** 2
plt.plot(x, y2, 'b-o', lw=5, marker='o', mfc='r')
plt.show()

⑥ 顯示圖形
如果是在pycharm中繪圖的話,必須要加下面代碼,才能顯示
plt.show()
至于figure.show()不知道是本人的版本問題還是怎么樣,在pycharm中沒效果
如果使用Jupyter Notebook 則不需要,自動顯示
3.2 線型設定
線型設定主要四種
- ①顏色
- ②點標記
- ③線條樣式
- ④透明度設定
常用的引數名 (小括號為簡寫) | 引數介紹 |
|---|---|
| color( c ) | 線條顏色 |
| linestyle(ls) | 線條形狀 |
| linewidth(lw) | 線的寬度 |
| marker | 點標記形狀 |
| markersize(ms) | 點標記的大小 |
| markeredgecolor(mec) | 點邊緣顏色 |
| markeredgewidth(mew) | 點邊緣寬度 |
| markerfacecolor(mfc) | 點的顏色 |
舉例:
plt.plot([5, 6, 7, 8], [1, 2, 3, 4], color='blue', linestyle='--',
linewidth=5, marker='^', markeredgecolor='green', markersize=7,
markeredgewidth=2, markerfacecolor='red',
)
plt.show()
或簡寫
plt.plot([5, 6, 7, 8], [1, 2, 3, 4], color='blue', ls='--',
lw=5, marker='^', mec='green', ms=7,
mew=2, mfc='red',
)
plt.show()

①顏色
常用顏色:
- 顏色:藍色"b" 綠色"g" 紅色"r" 青色"c" 品紅"m" 黃色"y" 黑色"k" 白色"w"
# color語法
plt.plot([4,7,1,0],[1,3,9,2],color='r')
顏色大全

②點標記
| color引數 | 說明 | marker引數 | 說明 | linestyle引數 | 說明 |
|---|---|---|---|---|---|
| r | 紅色 | . | 點標記 | - | 直線 |
| y | 黃色 | o | 圓圈標記 | - - | 虛線 |
| g | 綠色 | v | 下三角形標記 | : | 點線 |
| b | 藍色 | ^ | 上三角形標記 | -. | 點畫線 |
| w | 白色 | < | 左三角形標記 | ||
| k | 黑色 | > | 右三角形標記 | ||
| m | 品紅 | s | 正形標記 | ||
| c | 青色 | p | 五邊形標記 | ||
| * | 五角形標記 | ||||
| h | 六邊形標記 | ||||
| + | +號標記 | ||||
| x | x標記 | ||||
| D | 大菱形標記 | ||||
| d | 小菱形標記 | ||||
| l | 豎線標記 | ||||
| _ | 橫線標記 |
③線條樣式
| 線條樣式大全 | 說明 |
|---|---|
| - | 直線 |
| - - | 虛線 |
| : | 點線 |
| -. | 點畫線 |
簡寫:色、點標記與線型可以使用一個引數設定進行簡化
- 格式:顏色、點標記樣式、線條樣式位置可互換
- 注意:簡化設定引數除這三者之外不需要再添加任何東西
- 舉例:ro-- 、b:o 、*-.g 、-y<
代碼測驗
plt.plot([4, 7, 1, 0], [1, 3, 9, 2], '*-.g')
plt.show()
結果如下

④透明度設定
1. 介紹:
可以通過alpha引數來設定影像的透明度,alpha引數的值范圍在 0(完全透明) ~ 1(不透明)
2. 舉例說明:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2,2,200)
y1 = 2 * x + 1
y2 = 2*x**2
plt.plot(x,y1,'r*:',alpha=0.1)
plt.plot(x,y2,'b<-.',alpha=0.7)
plt.show()
結果如下:

3.3 中文與特殊符號(負號)相關支持設定
matplotlib設定相關支持主要有兩種:
- ①中文支持設定
- ②"-"(負號)特殊符號設定
①中文支持設定
matplotlib默認的情況下是不支持中文顯示會產生中文亂碼的問題,因為字體的默認設定中并沒有中文字體,所以我們只要需要做一些中文字體的名稱的設定操作就可以了,大致的設定方法會一一介紹:
<1>設定中文字體相關引數
| family(中文字體) | 說明 | style(字體風格) | 說明 | size(字體大小) | 說明 |
|---|---|---|---|---|---|
| SimHei | 中文黑體 | normal | 常規(默認) | 10 | 默認 |
| FangSong | 中文仿宋 | italic | 斜體 | >10 | 字體變大 |
| YouYuan | 中文幼圓 | oblique | 傾斜 | <10 | 字體變小 |
| STSong | 華文宋體 | ||||
| Kaiti | 中文楷體 | ||||
| LiSu | 中文隸書 | ||||
| Microsoft YaHei | 微軟雅黑 | ||||
| Microsoft JhengHei | 微軟正黑體 |
<2>plt.rcParams方法設定
- 示例代碼
# # 中文字體設定
plt.rcParams["font.family"] = "SimHei"
# # 字體風格設定
plt.rcParams["font.style"] = "italic"
# # 字體大小設定(默認是10)
plt.rcParams["font.size"] = 16
x = np.linspace(-2, 2, 200)
y2 = 2 * x ** 2
plt.plot(x, y2)
plt.title('我是標題')
plt.show()
- 結果如下

<3>plt.rc()方法設定
- 示例代碼
x = np.linspace(-2, 2, 200)
y2 = 2 * x ** 2
plt.rc('font',family='MicroSoft YaHei',weight='bold')
plt.plot(x, y2)
plt.title('我是標題')
plt.show()
- 結果如下

<4>font_manager()自定義方法設定
- 示例代碼
from matplotlib.font_manager import FontProperties
# fname:給定電腦字體的路徑;還可以進行其它設定
font = FontProperties(fname='C:\\Windows\\Fonts\\simfang.ttf', size=25)
x = np.linspace(-2, 2, 200)
y2 = 2 * x ** 2
plt.plot(x, y2)
plt.title('我是標題', fontproperties=font)
plt.show()
自己也可以去打開電腦字體的路徑

- 結果如下

<5>定義變數font方法設定
- 示例代碼
# 定義一個font就可以在多個繪圖設定中文支持
font = {"family": "SimHei",
"style": "oblique",
"weight": "normal",
"color": "red",
"size": 25
}
x = np.linspace(-2, 2, 200)
y2 = 2 * x ** 2
plt.plot(x, y2)
plt.title('我圖一是標題', font)
plt.show()
plt.plot([4, 7, 1, 0], [1, 3, 9, 2])
plt.title('我圖二是標題', font)
plt.show()
- 結果如下

②"-"(負號)特殊符號設定
在支持中文顯示狀態下是否支持使用Unicode的負號需要設定axes.unicode_minus為False
- 示例代碼
plt.rcParams["axes.unicode_minus"] = False # 設定中文顯示狀態下支持使用Unicode的‘-’號
plt.rcParams["font.family"] = "SimHei"
plt.rcParams["font.style"] = "italic"
plt.rcParams["font.size"] = 16
x = np.linspace(-2, 2, 200)
y2 = 2 * x ** 2
plt.plot(x, y2)
plt.title('我是標題')
plt.show()
- 結果如下

3.4 圖例和網路的設定
??這部分主要講下面兩部分的相關知識點:
- ①圖例設定
- ②網格設定
①圖例設定
<1>什么是圖例?
圖例(legend)是放置在我們的坐標邊界里面的一個東西,legend 在英語里面的含義就是圖示的說明,如下圖所指的,

<2>圖例有什么作用?
解釋一下我們坐標軸里面的圖形的含義,(例如:x線表示男,y線表示女),特別是在繪制多條線時,設定圖例來標注每條線所代表的含義可以幫助我們看圖形更加清晰易懂,
<3>legend函式中的常用引數
語法示例:
plt.legend(['第一條線'], loc='upper center', title='我是圖例標題', ncol=1, frameon=False)
| 引數 | 說明 |
|---|---|
| [‘坐標軸名稱’] | 一般為第一個legend函式引數,串列的元素個數與坐標軸數目相等 |
| loc | 指定圖例的位置,默認為best,可以以元組形式指定坐標,基于影像左下角計算位置 |
| title | 設定圖例的標題 |
| ncol | 圖例顯示的列數,默認為1列 |
| frameon | 設定是否顯示圖例的邊框,True(默認值)顯示,False不顯示 |
注意:legend函式要做坐標軸畫好之后繪制
①loc引數: 設定圖例擺放位置
??該引數的值默認是best,還有upper right、upper left、lower left、lower right、right 、center left、center right、lower center、upper center、center.也可以指定一個坐標(元組),默認以左下角計算位置,坐標的值是基于當前坐標原點的比例.
- 示例代碼
plt.plot([4, 7, 1, 0], [1, 3, 9, 2], 'ro--')
plt.rcParams['font.family'] = 'SimHei'
plt.legend(['我是一個圖例'], loc=(0.5, 0.8))
plt.show()
- 結果如下 (若loc=(1,1)圖例已經在坐標系外)
??這里的loc是比較簡單直接的方式,此外,我們有一些通用的方法來手動的設定我們的legend box 放置的地方,那就是使用我們的bbox_to_anchor這個引數和loc引數一起搭配,在此不再細說,
②title引數: 設定圖例的標題
- 示例代碼
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["font.family"] = "SimHei"
x = np.linspace(-2, 2, 200)
y1 = 2 * x + 1
y2 = 2 * x ** 2
y3 = x ** 1 / 2 - 1
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.legend(['第一條線', '第二條線', '第三條線'], loc='upper center', title='我是圖例標題')
plt.show()
- 結果如下

③ncol引數: 設定圖例顯示的列數
- 示例代碼
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["font.family"] = "SimHei"
x = np.linspace(-2, 2, 200)
y1 = 2 * x + 1
y2 = 2 * x ** 2
y3 = x ** 1 / 2 - 1
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.legend(['第一條線', '第二條線', '第三條線'], loc='upper center'
, title='我是圖例標題', ncol=3) # 將圖例顯示列數設定為3
plt.show()
- 結果如下

④frameon引數: 設定是否顯示圖例的邊框
- 示例代碼
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["font.family"] = "SimHei"
x = np.linspace(-2, 2, 200)
y1 = 2 * x + 1
y2 = 2 * x ** 2
y3 = x ** 1 / 2 - 1
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.legend(['第一條線', '第二條線', '第三條線'], loc='upper center'
, title='我是圖例標題', ncol=3, frameon=True)
plt.show()
- 結果如下

②網格設定
??網格設定:以xy坐標軸上顯示的各個點延長出線條形成一張網圖,可以更清晰得觀察繪圖對應得坐標軸上的每一個點,可以通過plt.grid()方法來設定是否顯示網格,True為顯示,False不顯示,
<1>網格設定語法引數
| 引數 | 說明 |
|---|---|
| color ) | 設定網格線顏色 |
| axis | 設定網格線顯示x或y(默認全部顯示:both) |
| linestyle | 設定網格線形狀 |
| linewidth | 設定網格線寬度 |
- 示例代碼
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["font.family"] = "SimHei"
x = np.linspace(-2, 2, 200)
y1 = 2 * x + 1
y2 = 2 * x ** 2
y3 = x ** 1 / 2 - 1
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.legend(['第一條線', '第二條線', '第三條線'], loc='upper center'
, title='我是圖例標題', ncol=3, frameon=True)
plt.grid(True, c='k', ls='--', lw='3')
plt.show()
- 結果如下

- 下面為axis的示例結果

后面每晚我會持續更新,有什么不足的歡迎小伙伴們在評論交流
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/137809.html
標籤:其他
