matplotlib

因為和通常numpy一起用,所以開頭要寫

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] # 正常顯示中文
plt.rcParams['axes.unicode_minus'] = False # 正常顯示負號

初始化與顯示

作法一:建立影像物件

語法如下

fig = plt.figure()

fig可以換成其他名稱,以下使用fig指代影像物件
建立完成繪圖物件再建立一個子圖

axe = fig.add_subplot(nrows: int = 1, ncols: int = 1, index: int|tuple[int,int] = 1)

想像一個nrows橫行ncols直列的網格,並把axe放在index所指的位置
注意此處座標/索引皆由1開始而非由0開始
如果不需要進行排版可以省略所有引數
最後是顯示的部分

fig.show()

如果用的是Python console則會建立一個視窗來顯示圖表
如果用的是Jupyter NoteBook/JupyterLab則會顯示在建立fig和axe的那一個Cell下方(fig和axe要在同一個Cell建立,否則不會顯示),且不需要執行此行
若堅持要使用show,則在開頭加上

import matplotlib
matplotlib.use('TkAgg')

且此作法會導致程式建立一個視窗來顯示圖表

作法二:直接使用plt

若不想要使用繪圖物件,可以把plt當成一個子圖來使用
使用Jupyter NoteBook/JupyterLab時建議使用此做法
也可以建立個子圖

plt.subplot(nrows: int = 1, ncols: int = 1, index: int|tuple[int,int] = 1)

想像一個nrows橫行ncols直列的網格,並在index所指的位置建立子圖,使plt當成該子圖使用
最後是顯示的部分

plt.show()

如果用的是Python console則會建立一個視窗來顯示圖表
如果用的是Jupyter NoteBook/JupyterLab則會顯示在下方

圖表繪製

基本繪製

折線圖

lines = axe.plot(x軸資料,y軸資料,樣式)

"資料"可以是list或是一維的numpy陣列
資料可以不只一組,用來在一張圖中顯示多筆資料
兩筆資料這樣寫:

lines = axe.plot(x軸資料1,y軸資料1,x軸資料2,y軸資料2,樣式)

lines是一個儲存折線的列表,幾組資料就幾條折線

折線圖樣式
設定折線圖外觀的時候可以直接用樣式字串或單獨設置三個部分
樣式字串由三個部分組成
1. 色彩字元

色彩字元 說明
b
g
r
c
m 洋紅
y
k
w
2. 線型字元
線型字元 說明
- 實線
-- 短劃虛線
. 點虛線
-: 短劃點虛線
3. 符號字元
符號字元 說明
.
, 像素
o 圓形
s 方形
^ 三角形

Ex.藍色實線並用三角形符號記做

"b-^"


常用參數

名稱 意義
color 顏色
marker 點的樣式
linestyle 線段的樣式
fmt 樣式字串

散佈圖

axe.scatter(x軸資料,y軸資料,點大小,色彩)

"資料"可以是list或是一維的numpy陣列,只能有一組
"點大小"和"色彩"是和資料長度相同的list或是一維的numpy陣列
scatter指令可重複執行來疊加資料

長條圖

垂直:

axe.bar(索引,資料)
axe.set_xticks(索引,標籤)
plt.xticks(索引,標籤) #對於使用plt的情況

水平:

axe.barh(索引,資料)
axe.set_yticks(索引,標籤)
plt.yticks(索引,標籤) #對於使用plt的情況

索引用來表示資料的顯示順序
索引通常為

np.arange(len(標籤))

bar指令可重複執行來疊加資料
並按照索引排列

常用參數

名稱 意義
width 線條寬度(比例)
align 對齊方式

直方圖

axe.hist(資料,)

"資料"可以是list或是一維的numpy陣列,可以包含多組,但是要用list包起來

常用參數

名稱 意義
bins 組距
range 範圍
stacked 有多組資料時是否把多個直方圖堆疊起來
density 是否用密度做顯示
cumulative 是否用累積函數做顯示

圓餅圖

patches, texts = axe.pie(資料,labels=標籤)

data參數

在繪製任何資料時,都可以用data參數指定資料來源
如:

axe.plot(df["x"],df["y"])

可改為:

axe.plot("x","y",data=df)

畫線

axe.axhline(y座標,顏色,樣式,寬度) # 畫橫線
axe.avhline(x座標,顏色,樣式,寬度) # 畫直線

圖例

在繪製任何資料時,都可在結尾加上label="xxx"來設置資料集名稱
如:

axe.plot(x,y,label="sin()")

並使用

axe.legend()

顯示圖例

標籤

axe.set_title(text: str) # 標題
axe.set_ylabel(text: str) # Y軸名稱
axe.set_xlabel(text: str) # X軸名稱
plt.title(text: str) # 對於使用plt的情況
plt.ylabel(text: str) # 對於使用plt的情況
plt.xlabel(text: str) # 對於使用plt的情況

標記

axe.annotate(文字, 標記位置, 文字位置, 箭頭標記的屬性) # 位置用(x,y)表示,xy皆與資料使用相同座標軸

外觀

axe.grid(showgrid: bool) # 是否顯示網格
axe.axis([xmin,xmax,ymin,ymax]) # 設置座標軸範圍

多軸圖表

要建立多軸圖表可以用

twin_axe = axe.twinx()

建立一個與原來子圖共用x軸的子圖
再分別對兩個子圖做操作即可