人工智能之数据分析 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》

 posted on 2025-11-30 18:49  咚咚王者  阅读(0)  评论(0)    收藏  举报