matplotlib實(shí)現(xiàn)矩陣和圖像的可視化表示
偽彩圖
【plt】中提供了三種矩陣可視化函數(shù),分別是imshow, matshow以及pcolormesh,相較之下,前兩者比較相似,且imshow常被用做圖片展示工具,所以matshoww這個(gè)函數(shù)基本沒什么人知道,二者對(duì)比如下
import matplotlib.pyplot as plt import numpy as np x = np.random.rand(5,5) fig,axes = plt.subplots(1,2,figsize=(8,4)) axes[0].imshow(x) plt.title("imshow") axes[1].matshow(x) plt.title("matshow") plt.tight_layout() plt.show()
左右兩圖幾乎沒有區(qū)別,并且矩陣中每個(gè)元素都是嚴(yán)格的方形,即其長(zhǎng)寬比并不會(huì)隨著圖窗的變化而發(fā)生變化。
相比之下,pcolormesh就靈活很多,圖中的每個(gè)元素均為長(zhǎng)寬比可變的矩形,如果和text互相配合,就可以更加完美地表現(xiàn)矩陣,做到下圖的效果
代碼如下
def drawMat(x, ax=None): M, N = x.shape if not ax: ax = plt.subplot() arrM, arrN = np.arange(M), np.arange(N) plt.yticks(arrM+0.5, arrM) plt.xticks(arrN+0.5, arrN) ax.pcolormesh(x) ax.invert_yaxis() for i,j in product(range(M),range(N)): ax.text(j+0.2, i+0.55, f"{x[i,j]:.2}") plt.show() x = np.random.rand(5,5) drawMat(x)
等高線
偽彩圖可以通過顏色來標(biāo)注矩陣中每個(gè)元素的大小,從而對(duì)矩陣元素的整體分布情況有一個(gè)大致的了解。而有時(shí),我們希望更加清晰地了解矩陣元素的分層情況,這時(shí)可采用等高線圖contour和contourf,與偽彩圖相比,個(gè)中差別如下
X, Y = np.indices([100,100])/30 - 1.5 Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) fDct = {"contour": plt.contour, "contourf":plt.contourf, "pcolormesh" : plt.pcolormesh, "imshow":plt.imshow} fig = plt.figure(figsize=(9,6)) for i,key in enumerate(fDct, 1): ax = fig.add_subplot(2,2,i) fDct[key](Z) plt.title(key) plt.tight_layout() plt.show()
colorbar
偽彩圖通過偽彩色來表現(xiàn)矩陣元素的大小,而colorbar則標(biāo)注了為彩圖中的顏色映射值,一般來說,在【plt】繪圖時(shí),每個(gè)子圖都可以設(shè)置其自身的色條,
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() for i in range(2): ax = fig.add_subplot(2,1,i+1) ax = plt.pcolormesh(np.random.rand(10,20)) plt.colorbar() plt.show()
由于上下兩張圖采用了相同的偽彩映射,所以這兩個(gè)色條有些重復(fù)了,為了讓圖像更加簡(jiǎn)潔,從而產(chǎn)生了一張圖一個(gè)色條的需求。
下面新建一個(gè)坐標(biāo)軸,以單獨(dú)設(shè)置色條位置
fig = plt.figure() for i in range(2): ax = fig.add_subplot(2,1,i+1) im = plt.pcolormesh(np.random.rand(10,20)) plt.axis('off') # 指定colorbar的位置和大小 cax = fig.add_axes([0.92, 0.1, 0.02, 0.8]) fig.colorbar(im, cax=cax) plt.show()
效果如下
這種處理方法有一個(gè)問題,即colorbar所在坐標(biāo)系將無法控制,如果使用tight_layout來進(jìn)行緊湊布局,那么左側(cè)的圖像會(huì)忽視色條鋪滿整個(gè)區(qū)域。
為了讓色條可以在布局中維持不變,可通過GridSpec來進(jìn)一步定制布局網(wǎng)格,
fig = plt.figure() gs = plt.GridSpec(2, 2, width_ratios=[15, 1], height_ratios=[1, 1]) plt.subplot(gs[0, 0]) plt.title("A") im = plt.pcolormesh(np.random.rand(10,20)) plt.axis('off') plt.subplot(gs[1, 0]) plt.title("B") im = plt.pcolormesh(np.random.rand(10,20)) plt.axis('off') ax = plt.subplot(gs[:, 1]) fig.colorbar(im, cax=ax) plt.show()
其中,width_ratios為橫向的單元格寬度比例,height_ratios為縱向的單元格高度比例。繪圖結(jié)果如下,這樣一來,無論布局如何發(fā)生變化,左側(cè)圖形與右側(cè)色條的寬度比值均為15:1,不會(huì)發(fā)生變化,從而在圖像繪制時(shí)保證了風(fēng)格的統(tǒng)一。
以上就是matplotlib實(shí)現(xiàn)矩陣和圖像的可視化表示的詳細(xì)內(nèi)容,更多關(guān)于matplotlib矩陣和圖像可視化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Python標(biāo)準(zhǔn)庫(kù)中的wave模塊繪制樂譜的簡(jiǎn)單教程
這篇文章主要介紹了使用Python標(biāo)準(zhǔn)庫(kù)中的wave模塊繪制樂譜,涉及到了numpy模塊和坐標(biāo)的可視化運(yùn)用,用到了需要的朋友可以參考下2015-03-03python中將\\uxxxx轉(zhuǎn)換為Unicode字符串的方法
這篇文章主要介紹了python中將\\uxxxx轉(zhuǎn)換為Unicode字符串的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09python常用時(shí)間庫(kù)time、datetime與時(shí)間格式之間的轉(zhuǎn)換教程
Python項(xiàng)目中很多時(shí)候會(huì)需要將時(shí)間在Datetime格式和TimeStamp格式之間轉(zhuǎn)化,下面這篇文章主要給大家介紹了關(guān)于python常用時(shí)間庫(kù)time、datetime與時(shí)間格式之間轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2023-02-02Protocol Buffers(Protobuf)功能及使用方法
本文介紹了ProtocolBuffers(Protobuf)及其編譯器protoc,包括其數(shù)據(jù)描述語(yǔ)言的特性、編譯器的功能、.proto文件的定義、使用方法、支持的編程語(yǔ)言、安裝步驟、常用命令選項(xiàng)以及高級(jí)功能,感興趣的朋友跟隨小編一起看看吧2025-01-01python實(shí)現(xiàn)通過隊(duì)列完成進(jìn)程間的多任務(wù)功能示例
這篇文章主要介紹了python實(shí)現(xiàn)通過隊(duì)列完成進(jìn)程間的多任務(wù)功能,結(jié)合實(shí)例形式分析了Python隊(duì)列完成進(jìn)程間的多任務(wù)以及進(jìn)程池pool相關(guān)操作技巧,需要的朋友可以參考下2019-10-10Python?Pandas多種添加行列數(shù)據(jù)方法總結(jié)
在進(jìn)行數(shù)據(jù)分析時(shí)經(jīng)常需要按照一定條件創(chuàng)建新的數(shù)據(jù)列,然后進(jìn)行進(jìn)一步分析,下面這篇文章主要給大家介紹了關(guān)于Python?Pandas多種添加行列數(shù)據(jù)方法的相關(guān)資料,需要的朋友可以參考下2022-07-07Python 數(shù)據(jù)的累加與統(tǒng)計(jì)的示例代碼
這篇文章主要介紹了Python 數(shù)據(jù)的累加與統(tǒng)計(jì)的示例代碼,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹
今天小編就為大家分享一篇對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12