Python可視化與交互matplotlib庫(kù)的詳細(xì)介紹
matplotlib庫(kù)介紹
matplotlib庫(kù)是一個(gè)非常實(shí)用的庫(kù),與numpy、pandas庫(kù)并稱為三大頂級(jí)Python庫(kù)。它可以將matlab中的相當(dāng)一部分繪圖功能遷移到python中,同時(shí),也可以滿足一定的交互需求,非常適合可視化的需求。
繪圖基本邏輯
先上示例:
import matplotlib.pyplot as plt
import numpy as np
# 畫圖基本邏輯
## 準(zhǔn)備數(shù)據(jù)
x = np.linspace(0, 10, 100)
y = np.sin(x)
## 創(chuàng)建畫布和容器
fig, ax = plt.subplots()
## 繪制圖形
ax.plot(x, y)
# 自定義圖形
ax.set_title('Sine Wave') # 設(shè)置標(biāo)題
ax.set_xlabel('x') # 設(shè)置橫坐標(biāo)標(biāo)簽
ax.set_ylabel('sin(x)') # 設(shè)置縱坐標(biāo)標(biāo)簽
ax.grid(True) # 顯示網(wǎng)格
# 顯示圖形
plt.show()
該程序運(yùn)行出來的圖如下:

該實(shí)例中,整個(gè)繪圖流程分為了準(zhǔn)備數(shù)據(jù)、創(chuàng)建畫布、繪制圖形、圖形編輯這幾個(gè)部分。
首先第一部分,準(zhǔn)備數(shù)據(jù)。本示例中利用numpy庫(kù)創(chuàng)建了一組正弦函數(shù)數(shù)據(jù),在實(shí)際應(yīng)用中,更多的是從文件中讀取數(shù)據(jù)。
第二部分創(chuàng)建畫布,在matplotlib庫(kù)中,通常把繪制圖形分為局部和整體兩個(gè)部分,這是為了滿足多圖繪制的需求。因?yàn)樵诶L制數(shù)據(jù)可視化圖形中,通常需要繪制譬如多行多列的圖形,因此該庫(kù)中將繪圖整體稱之為Figure,將每一個(gè)繪制的圖形稱之為Axes,不過需要指明,該單詞雖然意為“坐標(biāo)軸”,但是其功能更貼切于一個(gè)容器,表述每一個(gè)子圖的繪制。在本示例中,由于只進(jìn)行了單圖的繪制,因此,后續(xù)繪制只使用了Axes的實(shí)例對(duì)象ax。
第三部分繪制圖形,根據(jù)提供的數(shù)據(jù),選擇不同的繪制方式和表現(xiàn)方式,這也是繪制的核心區(qū)域。
最后一部分,圖形編輯,可以完善圖形的相關(guān)信息,比如圖名、坐標(biāo)軸名、網(wǎng)格、圖例等。
一般處于調(diào)試需求,會(huì)將最后的圖形輸出并顯示,即plt.show。
繪制方式
上圖中我們展示了折線圖的畫法,在matplotlib庫(kù)中,針對(duì)不同數(shù)據(jù)和表現(xiàn)形式有不同的繪制方式。這里做簡(jiǎn)單列舉。
散點(diǎn)圖
x = np.random.rand(100)
y = np.random.rand(100)
fig, ax = plt.subplots()
ax.scatter(x, y)
ax.set_title("Scatter")
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.grid(True)
展示效果為:

柱狀圖
# 柱狀圖
categories = ['A', 'B', 'C', 'D', 'E', 'F']
values = [79, 68, 89, 94, 54, 77]
fig, ax = plt.subplots()
ax.bar(categories, values)
ax.set_title("Bar")
ax.set_xlabel("Student")
ax.set_ylabel("Scores")
plt.show()
展示效果為:

直方圖
# 直方圖
data = np.random.randn(1000)
fig, ax = plt.subplots()
ax.hist(data, bins = 100, color = "green", alpha = 0.75)
ax.set_title("Histogram")
ax.set_xlabel("Value")
ax.set_ylabel("Frequency")
ax.grid(True)
plt.show()
展示效果為:

多子圖繪制
上面提及,matplotlib庫(kù)允許多子圖繪制,比如對(duì)于一種數(shù)據(jù)我們可能想要多種表達(dá)方式,而這種表達(dá)方式不適合放在單圖中表示的時(shí)候,就需要這種表達(dá)。我們可以在subplot()函數(shù)中添加參數(shù),以實(shí)現(xiàn)這種繪制方式。
# 多子圖繪制
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, axs = plt.subplots(1, 2, figsize=(10, 8))
axs[0].plot(x, y1)
axs[0].set_title('sin(x)')
axs[0].set_xlabel('x')
axs[0].set_ylabel('sin(x)')
axs[0].grid(True)
axs[1].plot(x, y2)
axs[1].set_title('cos(x)')
axs[1].set_xlabel('x')
axs[1].set_ylabel('cos(x)')
axs[1].grid(True)
fig.suptitle('sin(x) VS. cos(x)', fontsize = 18)
plt.show()
展示效果為:

本示例中,將正弦函數(shù)和余弦函數(shù)繪制在同一區(qū)域中,可以更好地滿足特定情況下的繪制需求。同時(shí),該示例也更好的體現(xiàn)出了Figure和Axes的區(qū)別。
二維數(shù)據(jù)繪制
在一些可視化需求中,往往不是簡(jiǎn)單的數(shù)字?jǐn)?shù)據(jù)繪制,而是會(huì)出現(xiàn)一些二維數(shù)據(jù)如.grd格式的文件可視化。這里利用GMT工具繪制的.grd文件作為原始數(shù)據(jù),通過matplotlib庫(kù)進(jìn)行可視化需求,數(shù)據(jù)格式為netCDF-4。
原圖如下:

代碼如下:
import matplotlib.pyplot as plt
from netCDF4 import Dataset
## 準(zhǔn)備數(shù)據(jù)
file_path = "C:/Users/hang/Downloads/test.grd"
nc = Dataset(file_path, 'r')
lon = nc.variables['lon'][:]
lat = nc.variables['lat'][:]
z = nc.variables['z'][:]
nc.close()
## 創(chuàng)建畫布和容器
fig, ax = plt.subplots(figsize = (10, 8))
## 圖形繪制
## pcolormesh是一個(gè)用于繪制二維網(wǎng)格數(shù)據(jù)的函數(shù),能夠?qū)?shù)值映射為顏色
mesh = ax.pcolormesh(lon, lat, z, cmap = 'jet', shading = 'auto')
## 圖形編輯
cbar = fig.colorbar(mesh, ax = ax)
cbar.set_label('Height', fontsize = 14)
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.grid(True)
plt.show()
同樣是幾行數(shù)據(jù),按照相同的邏輯,即可進(jìn)行該文件的可視化:

其他用法
matplotlib庫(kù)提供了相當(dāng)豐富的可視化工具,同時(shí),也提供了一些有關(guān)交互可視化的工具,這部分將于后續(xù)單獨(dú)介紹。
總結(jié)
到此這篇關(guān)于Python可視化與交互matplotlib庫(kù)的文章就介紹到這了,更多相關(guān)Python matplotlib庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python except異常處理之后不退出,解決異常繼續(xù)執(zhí)行的實(shí)現(xiàn)
這篇文章主要介紹了python except異常處理之后不退出,解決異常繼續(xù)執(zhí)行的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python GUI庫(kù)圖形界面開發(fā)之PyQt5結(jié)合Qt Designer創(chuàng)建信號(hào)與槽的詳細(xì)方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5結(jié)合Qt Designer創(chuàng)建信號(hào)與槽的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03
詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別
這篇文章主要介紹了詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-06-06
淺談cv2.imread()和keras.preprocessing中的image.load_img()區(qū)別
這篇文章主要介紹了淺談cv2.imread()和keras.preprocessing中的image.load_img()區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
詳解Python如何批量采集京東商品數(shù)據(jù)流程
這不快過年了,又是要買年貨,又是要給女朋友買禮物的,分析一下價(jià)格,看看哪些是真的降價(jià)了2022-01-01
詳解使用PyInstaller將Pygame庫(kù)編寫的小游戲程序打包為exe文件
這篇文章主要介紹了詳解使用PyInstaller將Pygame庫(kù)編寫的小游戲程序打包為exe文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

