人工智能之數據分析 Matplotlib

第五章 常見函數


(文章目錄)


前言

在 Matplotlib 中,除了常用的 plotscatterbar 等繪圖函數外,還有一些圖像處理樣式控制相關的常用函數,如 imshowimsaveimread,以及解決中文顯示問題的方法。此外,Seaborn 作為基於 Matplotlib 的高級可視化庫,也常與之配合使用。

本文將系統介紹這些內容:


一、Matplotlib 圖像處理三劍客:imread / imshow / imsave

⚠️ 注意:從 Matplotlib 3.6 起matplotlib.pyplot.imreadimsave 已被棄用(deprecated),推薦改用 Pillow(PIL)imageio。但為兼容舊代碼,仍可使用(部分版本會警告)。

1. plt.imread() —— 讀取圖像

import matplotlib.pyplot as plt

img = plt.imread('photo.jpg')  # 返回 numpy.ndarray (H, W, C)
print(img.shape)  # 如 (480, 640, 3) 表示 RGB 圖像
  • 支持格式:PNG、JPEG、TIFF 等(依賴 Pillow)
  • 返回值:float32(0~1)或 uint8(0~255),取決於文件

✅ 推薦替代(現代方式):

from PIL import Image
import numpy as np
img = np.array(Image.open('photo.jpg'))

2. plt.imshow() —— 顯示圖像

plt.imshow(img)
plt.axis('off')  # 關閉座標軸(圖像通常不需要)
plt.title("My Photo")
plt.show()

常用參數:

參數 説明
cmap 顏色映射,用於灰度圖,如 'gray', 'viridis'
vmin, vmax 控制顏色範圍(歸一化)
interpolation 插值方式,如 'nearest', 'bilinear'

✅ 顯示灰度圖示例:

gray_img = plt.imread('lena.png')  # 假設是單通道
plt.imshow(gray_img, cmap='gray')

✅ 顯示熱力圖(矩陣):

data = np.random.rand(10, 10)
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()


3. plt.imsave() —— 保存圖像數組為圖片文件

plt.imsave('output.png', img, cmap='gray')  # 若為灰度圖需指定 cmap

✅ 推薦替代:

from PIL import Image
Image.fromarray(img_uint8).save('output.png')  # 注意 dtype 應為 uint8

二、其他常見 Matplotlib 函數

函數 用途
plt.figure(figsize=(w, h)) 創建新圖形,設置尺寸(英寸)
plt.subplot(nrows, ncols, index) 創建子圖
plt.subplots() 一次性創建 figure + axes(推薦)
plt.tight_layout() 自動調整子圖間距,避免重疊
plt.savefig('file.png', dpi=300, bbox_inches='tight') 高清保存圖像
plt.close() 關閉當前圖形(防止內存泄漏)
plt.gca() / plt.gcf() 獲取當前座標軸 / 圖形對象
plt.xlim(), plt.ylim() 設置座標軸範圍
plt.xticks(), plt.yticks() 自定義刻度標籤

三、中文顯示問題解決方案

Matplotlib 默認不支持中文字體,直接使用中文會導致 方框或亂碼

✅ 方法一:全局設置中文字體(推薦)

import matplotlib.pyplot as plt

# Windows 常用字體
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑體
# macOS 可用:['Arial Unicode MS'] 或 ['PingFang HK']
# Linux 可用:['WenQuanYi Micro Hei']

plt.rcParams['axes.unicode_minus'] = False  # 正常顯示負號(如 -1)

# 測試
plt.plot([1, 2, 3], [1, 4, 9])
plt.title("中文標題測試")
plt.xlabel("X軸")
plt.show()

✅ 方法二:指定字體路徑(跨平台通用)

from matplotlib import font_manager

# 加載字體文件(如 SimHei.ttf)
font_path = "C:/Windows/Fonts/simhei.ttf"  # Windows 示例
my_font = font_manager.FontProperties(fname=font_path)

plt.plot([1, 2, 3], [1, 4, 9])
plt.title("中文標題", fontproperties=my_font)
plt.xlabel("X軸", fontproperties=my_font)
plt.show()

💡 提示:可通過以下代碼查看系統可用字體:

from matplotlib.font_manager import findSystemFonts
print([f for f in findSystemFonts() if 'hei' in f.lower() or 'song' in f.lower()])

四、Matplotlib 與 Seaborn 協同使用

Seaborn 是基於 Matplotlib 的高級統計可視化庫,語法更簡潔,配色更美觀。

安裝

pip install seaborn

基本用法

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 設置 Seaborn 樣式(會自動應用到 Matplotlib)
sns.set_style("whitegrid")  # 還有 "darkgrid", "ticks", "white"
sns.set_palette("Set2")     # 配色方案

# 示例:繪製帶回歸線的散點圖
tips = sns.load_dataset("tips")
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
plt.title("小費數據分佈(Seaborn + Matplotlib)")
plt.show()

混合使用技巧

  • Seaborn 繪圖後,仍可用 plt.title()plt.xlabel() 等 Matplotlib 函數進一步定製。
  • 使用 plt.figure()plt.subplots() 控制畫布佈局,再傳入 Seaborn 的 ax 參數:
fig, ax = plt.subplots(figsize=(8, 5))
sns.boxplot(data=tips, x="day", y="total_bill", ax=ax)
ax.set_title("Box Plot with Seaborn on Matplotlib Axes")
plt.show()

常用 Seaborn 函數 vs Matplotlib

分析目標 Seaborn Matplotlib
分佈 sns.histplot(), sns.kdeplot() plt.hist()
相關性 sns.heatmap(df.corr()) plt.imshow() + 手動標註
分類比較 sns.barplot(), sns.boxplot() plt.bar(), plt.boxplot()
散點關係 sns.scatterplot() plt.scatter()

✅ 建議:探索性數據分析用 Seaborn,精細控制或出版級圖表用 Matplotlib 面向對象 API


總結

功能 推薦做法
讀/寫圖像 優先用 PIL.Imageimageio,而非 imread/imsave
顯示圖像/熱力圖 plt.imshow() + cmap + colorbar()
中文顯示 plt.rcParams['font.sans-serif'] = ['SimHei']
美化圖表 sns.set_style() + Matplotlib 定製
複雜佈局 plt.subplots() + ax 對象傳給 Seaborn

後續

python過渡項目部分代碼已經上傳至gitee,後續會逐步更新。

資料關注

公眾號:咚咚王 gitee:https://gitee.com/wy18585051844/ai_learning

《Python編程:從入門到實踐》 《利用Python進行數據分析》 《算法導論中文第三版》 《概率論與數理統計(第四版) (盛驟) 》 《程序員的數學》 《線性代數應該這樣學第3版》 《微積分和數學分析引論》 《(西瓜書)周志華-機器學習》 《TensorFlow機器學習實戰指南》 《Sklearn與TensorFlow機器學習實用指南》 《模式識別(第四版)》 《深度學習 deep learning》伊恩·古德費洛著 花書 《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》 《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen)》 《自然語言處理綜論 第2版》 《Natural-Language-Processing-with-PyTorch》 《計算機視覺-算法與應用(中文版)》 《Learning OpenCV 4》 《AIGC:智能創作時代》杜雨+&+張孜銘 《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》 《從零構建大語言模型(中文版)》 《實戰AI大模型》 《AI 3.0》