1.繪制子圖的方式
- pyplot中函數subplot
- Figure類中的函數add_subplot
- pyplot中函數subplots
fig, ax = plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False,
squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
功能:繪制多個子圖,可以一次生成多個
參數:nrows和ncols:整數,表示子圖的行數和列數。
sharex和sharey:布爾值或字符串,表示是否共享x軸或y軸的屬性。 可選值有True、False、'row'和'col'。
squeeze:布爾值,默認為True。當子圖只有一個時,返回一個Axes對象
而不是一個數組。False時返回一個二維數組
width_ratios:列寬比例的序列,用于調整各列的寬度比
height_ratios:行高比例的序列,用于調整各行的高度比
subplot_kw:字典類型,可選參數。把字典的關鍵字傳遞給add_subplot()
來創建每個子圖。
gridspec_kw:字典類型,可選參數。把字典的關鍵字傳遞給GridSpec構造函數
創建子圖放在網格里(grid)。**fig_kw:把所有詳細的關鍵字參數傳給figure()函數。
返回值:fig:這是整個圖形的對象,可以對其進行全局設置,如標題、大小等。
axes:這是一個數組,包含所有的子圖。數組的形狀由nrows和ncols決定。
例如,如果 nrows=2 和 ncols=3,則 axes 將是一個 2x3 的數組,每個元素都是一個
子圖對象。
# 繪制子圖,返回值包含Figure對象和Axes對象,Axes對象是一個數組,可以通過下標進行訪問子圖
fig, ax = plt.subplots(2, 2)ax[0, 0].plot([2,3], [4,5])
ax[0, 1].plot([1,1], [2,1])fig.suptitle('sub')plt.show()
2.pyplot中常用函數
gcf
功能:獲取當前窗口的Figure對象,如果沒有活動的圖形,這個函數將創建一個新的圖形,并將其作為當前活動的圖形。通過此函數獲取了當前圖形的Figure對象后,可以調用Figure類中的相關操作
gca
功能:獲取獲取當前圖形中的Axes對象
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y, label='sin')
# 獲取Figure對象
fig = plt.gcf()
fig.suptitle('sin')
# 獲取Axes對象
ax = plt.gca()
ax.set_xlabel('x')plt.show()
savefig
matplotlib.pyplot 模塊中的 savefig 函數用于將當前圖形保存到文件中。
plt.savefig(*args, **kwargs)
參數:
????????fname:字符串或類似文件的對象,指定保存文件的路徑或文件名。可以是相對路徑或絕對路徑。如果文件擴展名缺失,將使用默認格式(通常是 PNG)。
????????dpi:可選,指定保存圖像的dpi(每英寸點數)。默認值是figure.dpi。
????????format:可選,指定文件格式(如 'png', 'pdf', 'svg', 'ps', 'eps', ...)。如果省略,將使用文件擴展名推斷格式。
????????bbox_inches:可選,指定裁剪框,可以是 'tight'、'standard' 或一個 Bbox 對象。默認為 'standard'。
????????????????tight:保存的圖形文件中不會有不必要的空白邊緣,使得圖形更加緊湊和整潔
????????pad_inches:可選,指定邊框填充量(以英寸為單位)。默認為 0.1。
????????facecolor:可選,指定圖像的背景顏色。默認為 'w'(白色)。
????????edgecolor:可選,指定圖像邊框的顏色。默認為 'w'(白色)。
????????orientation:可選,指定頁面方向('portrait' 或 'landscape'),僅對保存為 PDF 文件時有效。
????????papertype:可選,指定紙張類型(如 'a4', 'letter'),僅對保存為 PDF 文件時有效。
????????format_kwargs:可選,其他與格式相關的關鍵字參數。
????????metadata:可選,指定要寫入文件的元數據。
????????pil_kwargs 和 pdf_kwargs:可選,特定于 PIL 或 PDF 格式的參數。
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y, label='sin')y = np.cos(x)
plt.plot(x, y, label='cos')
# 隱藏坐標軸
plt.axis('off')
# 保存圖片
plt.savefig('./sin.png')
imsave
用于將圖像數據保存到磁盤上的函數
matplotlib.pyplot.imsave(fname, arr, **kwargs)
參數:fname:保存圖像的文件名,可以是相對路徑或絕對路徑。
????????arr:表示圖像的NumPy數組。
????????kwargs:可選參數,用于指定保存的圖像格式以及圖像質量等參數。
imsave和savefig區別:
????????savefig可以將繪制的圖像保存成文件,包含坐標、標題、圖例等
????????imsave是將二維或三維數據保存成圖像文件,不含坐標等,它沒法直接保存plot等繪制的圖像
arr = np.array([[1,2,3,1], [2,3,1,2]])
# 繪制二維或三維數據圖像,通過cmap進行顏色映射
plt.imshow(arr, cmap='gray')
plt.imsave('./test.png', arr)
plt.show()
imshow
????????imshow() 函數是 Matplotlib.pyplot 庫中的一個函數,它常用于繪制二維的灰度圖像或彩色圖像,也可以用于繪制矩陣、熱力圖、地圖等。
imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, *, data=None, **kwargs)
參數:X:圖像數據。這通常是一個二維數組(灰度圖像)或一個三維數組(彩色圖像,其中第三維是顏色通道)。對于二維數組,可以使用 cmap 參數來指定顏色映射
????????cmap:顏色映射。用于控制圖像中不同數值所對應的顏色。默認顏色是'viridis',也可以設置其他顏色,如`gray`、`hot`、`jet`、'binary'等
????????norm:用于將數據值標準化到 [0, 1] 區間。以便與顏色映射一起使用。如果為 None,則數據將直接用于顏色映射。
????????aspect:控制圖像寬高比,'auto'(默認,根據數據形狀自動調整)、'equal'(使像素為正方形)或數字(指定寬高比)
????????interpolation:插值方法。用于控制圖像的平滑程度和細節程度。可以選擇`nearest`、`bilinear`、`bicubic`等插值方法。
????????alpha:圖像透明度。取值范圍為0~1。
????????origin:坐標軸原點的位置。可以設置為`upper`或`lower`。
????????extent:控制顯示的數據范圍。可以設置為`[xmin, xmax, ymin, ymax]`。
????????vmin、vmax:控制顏色映射的值域范圍。
? ? ? ?filternorm 和 filterrad:用于圖像濾波的對象。可以設置為`None`、`antigrain`、`freetype`等。
????????imlim: 用于指定圖像顯示范圍。
????????resample:用于指定圖像重采樣方式。
????????url:用于指定圖像鏈接。
plt.colorbar()
功能:顯示顏色柱
imread
????????imread() 方法是 Matplotlib 庫中的一個函數,用于從圖像文件中讀取圖像數據。
imread() 方法返回一個 numpy.ndarray 對象,其形狀是 (nrows, ncols, nchannels),表示讀取的圖像的行數、列數和通道數:
- 如果圖像是灰度圖像,則 nchannels 為 1。
- 如果是彩色圖像,則 nchannels 為 3 或 4,分別表示紅、綠、藍三個顏色通道和一個 alpha 通道;為3時表示紅綠藍,為4時表示紅綠藍、透明度。
matplotlib.pyplot.imread(fname, format=None)
參數:fname:指定了要讀取的圖像文件的文件名或文件路徑,可以是相對路徑或絕對路徑。
????????format:參數指定了圖像文件的格式,如果不指定,則默認根據文件后綴名來自動識別格式。
返回值:numpy.ndarray 對象
arr = plt.imread('map.png')
plt.imshow(arr)
plt.show()
close
plt.close(fig=None)
功能:該函數用于關閉一個或多個打開的圖形窗口,釋放資源
參數:fig:指定要關閉的圖形,可以是Figure對象,也可以是圖形對應的整數
????????all:關閉所有圖形,如果參數省略,關閉當前圖像
Line2D? 類函數
????????plt.plot函數的返回值表示包含一個或多個 Line2D 對象(有多條線時會返回多個Line2D對象)
????????Line2D 是 Matplotlib 中用于表示二維線條的類。通過返回 Line2D 對象,你可以訪問和修改線條的各種屬性,例如顏色、線型、標簽等。這使得 plt.plot() 不僅僅是繪制圖形,還可以讓你對繪制的線條進行進一步的定制。
get_label
????????該方法用于獲取圖像的標簽(參數中指定的label值)。這個方法通常用于獲取已經設置好的標簽,以便于后續的檢查或修改.
set_data
????????該函數功能為用于動態更新線條的 x 和 y 數據。主要在需要實時更新圖形(例如動畫)的場景中。
Line2D.set_data(xdata, ydata)
????????調用該方法后,圖形會根據新的數據重新繪制。它不會自動刷新圖形,但可以與 plt.draw() 或 plt.pause() 等方法結合使用,以實現動態更新的效果。
pause
用于在繪圖時暫停程序執行,并在指定的時間間隔后繼續執行。它常用于動態更新圖形或創建簡單的動畫效果。
函數的作用:
- 暫停程序:plt.pause(interval) 會暫停程序的執行,暫停的時間由參數 interval(單位為秒)決定。
- 刷新圖形窗口:在暫停期間,plt.pause() 會強制刷新圖形窗口,顯示最新的圖形內容。這使得它特別適合用于動態更新圖形的場景。
函數原型:
pyplot.pause(interval)
參數:interval:時間,秒
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
ld, = plt.plot(x, y, label='sin')# 獲取圖像中label數據
# ret = ld.get_label()
# print(ret)y = np.cos(x)
# 根據指定的時間暫停程序
plt.pause(5)
# 修改原圖像的數據
ld.set_data(x, y)plt.show()
3.繪制子圖網格
????????使用模塊gridspec中的函數GridSpec繪制
????????在 Matplotlib 中,GridSpec 對象提供了一種靈活的方式來創建子圖網格(subplots grid),允許子圖跨越多個行和列,以及具有不均勻的行高和列寬。
from matplotlib.gridspec import GridSpec
GridSpec(nrows, ncols, figure=None, left=None, right=None, bottom=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None, w_pad=None, h_pad=None)
參數:nrows: int子圖網格的行數。
????????ncols: int子圖網格的列數。
????????figure: matplotlib.figure.Figure,
???????????????????optional,
???????????????????default: None
???????????????????指定的圖形對象。如果未提供,則默認創建一個新的圖形對象。
????????left: float, optional, default: None子圖網格左側的相對位置(0 到 1 的比例)。如果未指定,則使用默認的左邊界。
????????right: float, optional, default: None子圖網格右側的相對位置(0 到 1 的比例)。如果未指定,則使用默認的右邊界。
????????bottom: float, optional, default: None子圖網格底部的相對位置(0 到 1 的比例)。如果未指定,則使用默認的底邊界。
????????top: float, optional, default: None子圖網格頂部的相對位置(0 到 1 的比例)。如果未指定,則使用默認的頂邊界。
????????wspace: float or None, optional, default: None子圖之間的水平間距(以英寸為單位)或作為子圖寬度的比例。如果未指定,則使用默認的間距。
????????hspace: float or None, optional, default: None子圖之間的垂直間距(以英寸為單位)或作為子圖高度的比例。如果未指定,則使用默認的間距。
????????width_ratios: list of floats, optional, default: None
指定每一列的寬度比例。如果指定,則 ncols 必須與列表長度匹配。
????????height_ratios: list of floats, optional, default: None
指定每一行的高度比例。如果指定,則 nrows 必須與列表長度匹配。
????????w_pad: float, optional, default: None子圖之間的水平填充(以英寸為單位)。如果未指定,則使用默認的填充。
????????h_pad: float, optional, default: None子圖之間的垂直填充(以英寸為單位)。如果未指定,則使用默認的填充。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec
# import matplotlib.gridspec as gs
fig = plt.figure()# 添加子圖網格
gs = GridSpec(2, 3)
# 在第一行添加三個子圖
fig.add_subplot(gs[0, 0])
fig.add_subplot(gs[0, 1])
fig.add_subplot(gs[0, 2])
# 在第二行添加一個子圖
fig.add_subplot(gs[1, :])plt.show()