【matplotlib教程】資料視覺化

UnderTurrets發表於2024-08-23

@TOC


顯示中文和負號

  • matplotlib預設使用英文字型檔,漢字會亂碼,要指定中文字型檔
matplotlib.rcParams['font.family']='simHei'  #黑體
matplotlib.pyplot.rcParams['axes.unicode_minus'] = False	# 顯示負號

1.各種繪圖函式

1.1 matplotlib.pyplot.plot

def plot(*args, scalex=True, scaley=True, data=None, **kwargs):...

常用引數:

引數 含義
args1 橫座標陣列(list,numpy陣列,pandas電子表格)
args2 縱座標陣列(list,numpy陣列,pandas電子表格)
label 圖例名字,給一個字串即可
color 顏色
linestyle 線型
marker 附加點的樣式

引數說明:

  • 若輸入兩個陣列作為args,那麼第一個引數和第二個引數的陣列長度必須相同,它們是一一對應關係
  • 若只輸入一個陣列作為args,那麼matplolib會自動根據陣列長度進行橫座標的索引
  • 顏色、線性、點樣式會在第2節中詳細介紹

1.2 matplotlib.pyplot.scatter

def scatter(
        x, y, s=None, c=None, marker=None, cmap=None, norm=None,
        vmin=None, vmax=None, alpha=None, linewidths=None, *,
        edgecolors=None, plotnonfinite=False, data=None, **kwargs):...

常用引數:

引數 含義
x 橫座標陣列(list,numpy陣列,pandas電子表格)
y 縱座標陣列(list,numpy陣列,pandas電子表格)
s 點的大小
marker 點的樣式
label 圖例名字,給一個字串即可
color 顏色

引數說明:

  • x引數和y引數的陣列長度必須相同,一一對應
  • s表示點的大小,預設 20,也可以是個陣列,陣列每個引數為對應點的大小
  • 顏色、線性、點樣式會在第2節中詳細介紹

1.3 matplotlib.pyplot.bar

def bar(
        x, height, width=0.8, bottom=None, *, align='center',
        data=None, **kwargs):...

常用引數:

引數 含義
x 陣列,柱形圖的 x 軸資料
height 陣列,柱形圖的 y 軸資料
width 柱形圖的寬度
bottom height 座標的偏移量,預設 0
align 柱形圖與 x 座標的對齊方式
color 顏色
label 圖例名字,給一個字串即可
tick_label 用來替代 x 軸資料的字串或字串陣列

引數說明:

  • x引數和height引數的陣列長度必須相同,一一對應
  • width 表示柱的寬度,也可以是個陣列,對應每條柱的橫向寬度
  • bottom表示height座標的偏移量,也可以是個陣列,對應每條柱的y偏移量
  • align可選引數:中心對齊"center",左對齊"edge"
  • tick_label可以替代x軸的數字,也可以是個陣列,對應每條柱的x軸位置
  • 顏色會在第2節中詳細介紹

下面是一個在一張圖上畫出兩幅柱狀圖的例子:

import numpy as np
import matplotlib.pyplot as plt
# 資料
x = np.arange(4)
Bj = [52, 55, 63, 53]
Sh = [44, 66, 55, 41]
bar_width = 0.3
# 繪圖 x 表示 從那裡開始
plt.bar(x, Bj, bar_width)
plt.bar(x+bar_width, Sh, bar_width, align="center")
# 展示圖片
plt.show()

1.4 matplotlib.pyplot.pie

def pie(
        x, explode=None, labels=None, colors=None, autopct=None,
        pctdistance=0.6, shadow=False, labeldistance=1.1,
        startangle=0, radius=1, counterclock=True, wedgeprops=None,
        textprops=None, center=(0, 0), frame=False,
        rotatelabels=False, *, normalize=True, hatch=None, data=None):

常用引數:

引數 含義
x 陣列,用於繪製餅圖的資料,表示每個扇形的面積
explode 陣列,表示各個扇形之間的間隔
labels 列表,各個扇形的標籤
colors 陣列,表示各個扇形的顏色
autopct 字串,設定餅圖內各個扇形百分比顯示格式
radius 設定餅圖的半徑

引數說明:

  • x引數,labels引數,colors引數的陣列長度必須相同,一一對應
  • explode決定圖形顯示的方式
  • autopct舉例:%d%% 整數百分比,%0.1f 一位小數, %0.1f%% 一位小數百分比, %0.2f%% 兩位小數百分比

1.5 matplotlib.pyplot.hist

def hist(
        x, bins=None, range=None, density=False, weights=None,
        cumulative=False, bottom=None, histtype='bar', align='mid',
        orientation='vertical', rwidth=None, log=False, color=None,
        label=None, stacked=False, *, data=None, **kwargs):...

常用引數:

引數 含義
x 陣列,表示要繪製直方圖的資料
bins 直方圖的箱數
colors 顏色
label 圖例

引數說明:

  • bins舉例說明:如果 bins 引數為 30,這意味著將資料範圍分成 30 個等寬的區間,然後統計每個區間內資料的頻數。
  • 圖例、顏色等,會在第2節中詳細介紹

2.繪圖樣式

2.1 軸標籤和標題

軸標籤(matplotlib.pyplot.xlabel與matplotlib.pyplot.ylabel)

def xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs):...
def ylabel(ylabel, fontdict=None, labelpad=None, *, loc=None, **kwargs):...
  • loc引數只有"left", "center" , "right "可選

標題

def title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs):
  • loc引數只有"left", "center" , "right "可選

2.2 圖例位置(matplotlib.pyplot.legend)

  • 在繪圖時指定好label圖例後,如果不使用matplotlib.pyplot.legend函式指定圖例位置,圖例是不會顯示的
def legend(*args, **kwargs):...
  • loc引數如下:
可選引數
'upper right'
'upper left'
'lower left'
'lower right'
'right'
'center left'
'center right'
'lower center'
'upper center'
'center'

2.3 可選顏色(color)

常用顏色如下:

顏色標記 描述
'r' 紅色
'g' 綠色
'b' 藍色
'c' 青色
'm' 品紅
'y' 黃色
'k' 黑色
'w' 白色

2.4 線型(linestyle)

常用線型如下:

線型標記 描述
'-' 實線
':' 點虛線
'--' 破折線
'-.' 點劃線

2.5 點的樣式(marker)

常用樣式如下:
常用顏色如下:

可選markder 樣式 描述
"." 在這裡插入圖片描述
"," 在這裡插入圖片描述 畫素點
"o" 在這裡插入圖片描述 實心圓
"v" 在這裡插入圖片描述 下三角
"^" 在這裡插入圖片描述 上三角
"<" 在這裡插入圖片描述 左三角
">" 在這裡插入圖片描述 右三角
"1" 在這裡插入圖片描述 下三叉
"2" 在這裡插入圖片描述 上三叉
"3" 在這裡插入圖片描述 左三叉
"4" 在這裡插入圖片描述 右三叉
"8" 在這裡插入圖片描述 八角形
"s" 在這裡插入圖片描述 正方形
"p" 在這裡插入圖片描述 五邊形
"P" 在這裡插入圖片描述 填充的加號
"*" 在這裡插入圖片描述 星號
"h" 在這裡插入圖片描述 六邊形1
"H" 在這裡插入圖片描述 六邊形2
"+" 在這裡插入圖片描述 加號
"x" 在這裡插入圖片描述 乘號
"X" 在這裡插入圖片描述 填充的乘號
"D" 在這裡插入圖片描述 菱形
"d" 在這裡插入圖片描述 瘦菱形
"|" 在這裡插入圖片描述 豎線
"_" 在這裡插入圖片描述 橫線
4 在這裡插入圖片描述 左箭頭
5 在這裡插入圖片描述 右箭頭
6 在這裡插入圖片描述 上箭頭
7 在這裡插入圖片描述 下箭頭

3.畫布管理與多圖

3.1 subplots建立一張畫布上的多圖

def subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True,
             width_ratios=None, height_ratios=None,
             subplot_kw=None, gridspec_kw=None, **fig_kw):...

引數說明:

  • nrows表示子圖的行數,ncols表示子圖的列數

返回值說明:

  • 返回一個有2個元素的元組,分別為fig和ax。
  • fig為這張畫布
  • ax為子圖列表,想在第一張圖上畫折線圖:呼叫ax[0].plot

3.2 subplot建立一張畫布上的多圖

def subplot(*args, **kwargs):

使用說明

  • 輸入plt.subplot(2,2,1)後,表明此時選定2行2列的一共4張子圖中的第1張子圖
  • 此時呼叫plt.plt,就可以在第1張子圖上繪圖
  • 切換子圖時,輸入plt.subplot(2,2,2)後,表明切換到第2張子圖

3.3 清理

  • 清理一張圖上所有內容:
plt.cla()
  • 清理一張畫布上的所有圖:
plt.clf() 

3.4 畫布尺寸設定

fig = plt.figure(figsize=(16, 6),dpi=100)

以上設定了一張寬度16英寸,高度6英寸的畫布,且每英寸的畫素個數為100,也就是說此圖片的寬高是1600x600。大家可以自行修改想要的數值。

fig.tight_layout()

以上這行指令用於在所有子圖都繪製完畢後自動調整子圖之間的位置,防止子圖的軸標籤被遮擋。

動態圖

  1. 先開啟互動模式,然後提前展示畫布
plt.ion()
plt.show()
  1. 在每輪繪製前先進行清理,然後停留
plt.cla()
plt.plot(...)
plt.pause(0.001)

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章