matplotlib基本使用


 

圖片灰度處理

三種方法

讀圖: jin = plt.imread('./jinzhengen.png')

最小值 作為灰度值

jin_min = jin.min(axis=2)

最大值 作為灰度值

jin_max = jin.max(axis=2)

平均值 作為灰度值

jin_mean = jin.mean(axis=2)

加權平均值 作為灰度值 (使用最多)

weight = np.array([0.299,0.587,0.114]) # 權重jin_weight = np.dot(jin, weight)/3

 

Matplotlib基礎知識

Matplotlib中的基本圖表包括的元素

  • x軸和y軸 : 水平和垂直的軸線

  • x軸和y軸刻度 : 刻度標示坐標軸的分隔,包括最小刻度和最大刻度

  • x軸和y軸刻度標簽 : 表示特定坐標軸的值

  • 繪圖區域 : 實際繪圖的區域

可以理解為 畫板(包含邊框), 畫布(繪圖區)

 

只含單一曲線的圖

plt.plot(x,y)

plt.plot(y) # 只給一個值,默認為y軸,以y數據索引0 到 N-1 作為x軸

包含多個曲線的圖

1、可以使用多個plot函數(推薦),在一個圖中繪制多個曲線 (碰到 plt.show() 函數結束本次繪圖)

plt.plot(x,y)
plt.plot(x,np.sin(x))
plt.show()   # show方法顯示前面畫布的所有圖,之后畫圖會重建一個畫布
plt.plot(x,x)

2、也可以在一個plot函數中傳入多對X,Y值,在一個圖中繪制多個曲線

plt.plot(x,y,x,np.sin(x))  # x, y需成對出現

網格線

plt.grid(True) 方法為圖添加網格線

  • lw(linewidth) : 線的粗細

  • ls(linestyle): '-' ,'--' , '-.', ':'

  • alpha : 線的明暗程度

  • color : 顏色

  • which : major 主網格

  • axis: 'x' ,'y','both' 顯示哪方向網格線

plt.grid(which='major')

 

在一個畫布中畫多個子圖

方式1:

x= np.linspace(-20,20,200)
plt.figure(figsize=(3*5,4))  # 創建畫布 寬為15(一行三個子圖3*5), 高為4  

axes1 = plt.subplot(1,3,1)   # 創建子圖 一行三列第一個
axes1.plot(x,np.sin(x))
plt.grid()

axes2 = plt.subplot(1,3,2)
axes2.plot(x,np.sin(x))
plt.grid()

axes3 = plt.subplot(1,3,3)
axes3.plot(x,x**2)
plt.grid()

方式2:

 

坐標軸界限

axis方法

如果axis方法沒有任何參數,則返回當前坐標軸的上下限axis(xmin =,ymax = )

設置坐標軸類型:

plt.axis('equal')

  • 'off': 關閉坐標軸

  • 'equal': x,y軸刻度精度相等

  • 'scaled': 效果和equal一樣,x,y軸刻度范圍一樣

xlim方法和ylim方法

除了plt.axis方法,還可以通過xlim,ylim方法設置坐標軸范圍

plt.plot(x,x**2)
plt.xlim(xmin=-1, xmax=1)  # 關鍵字形式
plt.ylim((0,1))          # 還可以元組形式

坐標軸標簽

xlabel方法和ylabel方法

注意: plt.xlabel() 子圖使用: 對象.set_xlabel()

  • fontdict : 設置字體, 字典形式

    • fontsize 字體大小

    • c(color): 'r'

    • rotation 旋轉角度 (可寫字典外面)

    • position=(0,1)) (可寫字典外面)

x = np.linspace(-1,1,1000)
y = (1-x**2)**0.5
plt.plot(x,y,x,-y)
xlabel = plt.xlabel('x', fontdict=dict(fontsize=50, c='r',rotation=90)) # 直接參數設置
# xlabel.set_rotation(60)   # 通過xlabel對象設置
plt.ylabel('y=(1-x^2)^0.5', fontdict=dict(fontsize=20), rotation=0, position=(0,1))

 

標題

注意: plt.title() 子圖使用: 對象.set_title()

  • loc='right' 標題顯示位置 center(默認) left

  • fontdict : 字典形式 同標簽

plt.title('circle', loc='right', fontdict={'fontsize':50, 'rotation':60})
# 子圖沒有.title(),需使用.set_title()

 

圖例

legend()方法

兩種傳參方法:

【推薦使用】在plot函數中增加label參數

在legend方法中傳入字符串列表
  • loc參數

plt.legend(loc=8)

plt.legend(loc=(0,1)) # 相對坐標(畫板坐標)

字符串 數值 字符串 數值
best 0 center left 6
upper right 1 center right 7
upper left 2 lower center 8
lower left 3 upper center 9
lower right 4 center 10
right 5    
  • ncol參數

    ncol控制圖例中有幾列

    plt.legend(loc=8,ncol=3)

 

保存圖片

figure.savefig(): 需創建figure對象

  • filename含有文件路徑的字符串或Python的文件型對象。圖像格式由文件擴展名推斷得出,例如,.pdf推斷出PDF,.png推斷出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……)

  • dpi圖像分辨率(每英寸點數),默認為100

  • facecolor圖像的背景色,默認為“w”(白色)

  • transparent=True 透明

  • edgecolor: 邊緣顏色

figure = plt.figure(figsize=(10,6))
plt.plot(n1,label='one',ls='-.')
figure.savefig('./art.png', facecolor='g', dpi=200, transparent=True)

 

設置plot的風格和樣式

點和線的樣式

顏色

參數color或c

顏色值的方式
  • 別名

    • color='r'

  • 合法的HTML顏色名

    • color = 'red'

顏色 別名 HTML顏色名 顏色 別名 HTML顏色名
藍色 b blue 綠色 g green
紅色 r red 黃色 y yellow
青色 c cyan 黑色 k black
洋紅色 m magenta 白色 w white
  • HTML十六進制字符串

    color = '#eeefff'

  • 歸一化到[0, 1]的RGB元組

    color = (0.3, 0.3, 0.4)

透明度

alpha參數 值為0-1范圍

plt.plot(x,np.sin(x), c='b', alpha=0.1)

背景色

設置坐標軸的背景色(畫布)

# 方式1
axes = plt.subplot(facecolor='g')  # 設置畫布背景色
axes.plot(x, np.sin(x))

# 方式2
plt.gca(facecolor='g')  # 獲取當前軸面
plt.plot(x, np.sin(x))

設置畫板背景色

plt.figure(facecolor='r')
plt.plot(x, np.sin(x))

線型

參數linestyle或ls

線條風格 描述 線條風格 描述
'-' 實線 ':' 虛線
'--' 破折線 'steps' 階梯線
'-.' 點划線 'None' / ',' 什么都不畫
線寬

參數linewidth或lw

plt.plot(x, np.sin(x), linewidth=5, c='r')

不同寬度的破折線

dashes參數 設置破折號序列各段的寬度

# dashes的元素個數必須是偶數個 [線寬,空白寬] 交替
plt.plot(x, np.sin(x), linewidth=5, c='r', dashes=[3,5,1,2,6,7])

點型

marker : 點形狀

markersize: 點大小

x = np.linspace(0, 2*np.pi, 10)
plt.plot(x, np.sin(x), c='r', marker='2', markersize=50)
標記 描述 標記 描述
'1' 一角朝下的三腳架 '3' 一角朝左的三腳架
'2' 一角朝上的三腳架 '4' 一角朝右的三腳架
標記 描述 標記 描述
's' 正方形 'p' 五邊形
'h' 六邊形1 'H' 六邊形2
'8' 八邊形    
標記 描述 標記 描述
'.' 'x' X
'*' 星號 '+' 加號
',' 像素    
標記 描述 標記 描述
'o' 圓圈 'D' 菱形
'd' 小菱形 '','None',' ',None

多參數連用

顏色、點型、線型

x = np.linspace(0, 2*np.pi, 10)
plt.figure(figsize=(10,8))
plt.plot(x, np.sin(x), 'g-o', markersize=50) # g-o 表示 線顏色,線型,點型 可不寫全

更多點和線的設置

x = np.linspace(0,10, 10)
plt.plot(x,x,c='b', lw=2, ls='-.', marker='o', markersize=10, markeredgecolor='g',markeredgewidth=3,markerfacecolor='r')

 

參數 描述 參數 描述
color或c 線的顏色 linestyle或ls 線型
linewidth或lw 線寬 marker 點型
markeredgecolor 點邊緣的顏色 markeredgewidth 點邊緣的寬度
markerfacecolor 點內部的顏色 markersize 點的大小

在一條語句中為多個曲線進行設置

x = np.linspace(0,2*np.pi, 10)
plt.plot(x,np.sin(x),'g:o',x,np.cos(x),'b-.*',markersize=10 )
多個曲線同一設置
# 統一相同設置,使用關鍵參數, 會覆蓋前面單獨設置屬性
x = np.linspace(0,2*np.pi, 10)
plt.plot(x, np.sin(x), 'g:d',x, np.cos(x),color='r') # g:d 失效

 

三種設置方式

向方法傳入關鍵字參數

plt.plot(x,np.sin(x), c='r')

對實例使用一系列的setter方法

line, = plt.plot(x,np.sin(x))line.set_color('g')

使用setp()方法

line, = plt.plot(x,np.sin(x))plt.setp(line, 'color', 'y') # setp : set property

 

X、Y軸坐標刻度

xticks()和yticks()方法

plt.plot(x,np.sin(x), c='r')
# ticks 刻度 labels 標簽
plt.xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi], ['0', 'np.pi/2', 'np.pi', '3np.pi/2', '2np.pi'])
plt.yticks([-1, 0 ,1], ['-1', '0', '1'])

面向對象方法

axes = plt.subplot() # 創建子圖

使用子圖對象調用:

set_xticks、set_yticks、set_xticklabels、set_yticklabels方法

正弦余弦

LaTex語法,用𝜋π等表達式在圖表上寫上希臘字母

α alpha , Π pi , θ theta , σ sigma , λ lambda

 

2D圖形

直方圖

【直方圖的參數只有一個x!!!不像條形圖需要傳入x,y】

hist() 參數

  • bins可以是一個bin數量的整數值,也可以是表示bin的一個序列。默認值為10

  • normed如果值為True,直方圖的值將進行歸一化處理,形成概率密度,默認值為False

  • color指定直方圖的顏色。可以是單一顏色值或顏色的序列。如果指定了多個數據集合,顏色序列將會設置為相同的順序。如果未指定,將會使用一個默認的線條顏色

  • orientation設置orientation為horizontal創建水平直方圖。默認值為vertical

 

條形圖

【條形圖有兩個參數x,y!】

bar() 水平顯示、barh() 垂直顯示

plt.bar(np.arange(0,10), x, width=1 ) # 條形圖的x必須寫.

餅圖

【餅圖也只有一個參數x!】

pie()餅圖適合展示各部分占總體的比例,條形圖適合比較各部分的大小

n = [1,2,3]
plt.pie(n)   # n 個元素和超過1, 會計算個元素所占綜合總和比例

n = [0.4, 0.2, 0.3, 0.1]   # 各部分剛好占滿餅圖
plt.pie(n)

n = [0.4, 0.2, 0.3,]   # 普通未占滿餅圖
plt.pie(n)

餅圖陰影、分裂等屬性設置

#labels參數設置每一塊的標簽;labeldistance參數設置標簽距離圓心的距離(比例值)

#autopct參數設置比例值的顯示格式(%1.1f%%);pctdistance參數設置比例值文字距離圓心的距離

#explode參數設置每一塊頂點距圓形的長度(比例值);colors參數設置每一塊的顏色;

#shadow參數為布爾值,設置是否繪制陰影

# autopct: auto percentage 顯示比例   explode: 裂開, 餅尖距圓心距離 labels: 各部分標簽名
# labeldistance: 標簽距圓心距離   pctdistance: 比例距圓心距離,默認0.6 shadow=True 加陰影  
# startangle: 起始角度 textprops={'size',20} 字體
plt.pie([0.4, 0.2, 0.3, 0.1],autopct='%.2f%%', explode=[0.1,0.2,0.1,0.3], labels=list('ABCD'),labeldistance=1,colors=['red', 'green', 'magenta', 'cyan'],pctdistance=0.8,shadow=True,startangle=60,textprops={'size':20})

 

散點圖

【散點圖需要兩個參數x,y,但此時x不是表示x軸的刻度,而是每個點的橫坐標!】

scatter()

x = np.linspace(0, 2* np.pi, 20)
y = np.sin(x)
plt.scatter(x,y, s=100,c='r', marker='d', alpha=0.6, ) # s 點的大小 alpha 透明度
生成隨機大小,隨機顏色,隨機透明 的餅圖
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.figure(figsize=(10,6))
colors = np.random.rand(1000,4) # RGBA 隨機點顏色,透明度
size = np.random.randint(0,100,size=1000)  # 隨機點大小
plt.scatter(x,y,marker='d',c=colors, s=size)

顏色表示:

向量 - 對每個標記使用不同的顏色,並以線性方式將 c 中的值映射到當前顏色圖中的顏色。c的長度必須等於 xy 的長度。

plt.scatter(x,y,marker='d',c=[0,1,2,1,3], s=size) # c 中每個數字代表一個顏色,映射圖中點的顏色, c長度等於x和y長度

 

圖形內的文字、注釋、箭頭

控制文字屬性的方法:

所有的方法會返回一個matplotlib.text.Text對象

Pyplot函數 API方法 描述
text() mpl.axes.Axes.text() 在Axes對象的任意位置添加文字
xlabel() mpl.axes.Axes.set_xlabel() 為X軸添加標簽
ylabel() mpl.axes.Axes.set_ylabel() 為Y軸添加標簽
title() mpl.axes.Axes.set_title() 為Axes對象添加標題
legend() mpl.axes.Axes.legend() 為Axes對象添加圖例
figtext() mpl.figure.Figure.text() 在Figure對象的任意位置添加文字
suptitle() mpl.figure.Figure.suptitle() 為Figure對象添加中心化的標題
annnotate() mpl.axes.Axes.annotate() 為Axes對象添加注釋(箭頭可選)

圖形內的文字

text() 和 figtext()

# 顯示文字到坐標軸內
plt.text(0,0,'sin(0)=0')
plt.text(np.pi/2, 1, 'sin($\pi/2$)=1',fontdict=dict(fontsize=20))

# 顯示文字到坐標軸外
plt.figtext(1,0.5, 'y=sin(x)')

注釋

annotate()xy參數設置箭頭指示的位置,xytext參數設置注釋文字的位置arrowprops參數以字典的形式設置箭頭的樣式width參數設置箭頭長方形部分的寬度,headlength參數設置箭頭尖端的長度,headwidth參數設置箭頭尖端底部的寬度,facecolor(color)設置箭頭顏色shrink參數設置箭頭頂點、尾部與指示點、注釋文字的距離(比例值)

# 第一個坐標代表指示點, 第二個代表注釋文字位置
plt.annotate('this is me',(5,10),(8,15),arrowprops=dict(width=10,headwidth=20,headlength=20, color='r',shrink=0.1))

設置圖例

bbox_to_anchor,ncol mode,borderaxespad設置注解 arrowstyle

plt.plot(n1, label='plot')
plt.plot(n2, label='2nd plot')
plt.plot(n3, label='last plot')
plt.legend(loc=(0,1), ncol=3, mode='expand',borderaxespad=0,bbox_to_anchor=[0,1,1,0.08] )
plt.ylim(ymax=43) # 設置y軸上限
plt.annotate('important value', (50,20),(20,40),arrowprops=dict(arrowstyle='->'))

箭頭

樣式arrstyles = ['-', '->', '-[', '<-', '<->', 'fancy', 'simple', 'wedge']

 

3D圖

曲面圖

from mpl_toolkits.mplot3d.axes3d import Axes3D

x = np.linspace(0,8,100)
y = np.linspace(0,8,100)
X,Y = np.meshgrid(x,y)   # 生成網格
Z = np.sin(X) + np.cos(Y) + 3

plt.figure(figsize=(7*2, 6))
axes1 = plt.subplot(1,2,1,projection='3d')  # 定義畫三維圖的子圖
axes1.plot_surface(X,Y,Z)    # 畫三維圖

axes2 = plt.subplot(1,2,2,projection='3d')  
axes2 = axes2.plot_surface(X,Y,Z,cmap='rainbow')    
plt.colorbar(axes2,shrink=0.5)  # 設置顏色柱, shrink 寬高縮小為0.5倍

玫瑰圖/極坐標條形圖

x = np.arange(0,2*np.pi,np.pi/4) # x 使用弧度

y = 一個 ndarray

plt.subplot(projection='polar', facecolor='g')plt.bar(x,y,width=np.pi/4,color=np.random.rand(8,3))

 


免責聲明!

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



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