
第五章 常见函数
在 Matplotlib 中,除了常用的 plot、scatter、bar 等绘图函数外,还有一些图像处理和样式控制相关的常用函数,如 imshow、imsave、imread,以及解决中文显示问题的方法。此外,Seaborn 作为基于 Matplotlib 的高级可视化库,也常与之配合使用。
本文将系统介绍这些内容:
imread / imshow / imsave⚠️ 注意:从 Matplotlib 3.6 起
,matplotlib.pyplot.imread 和imsave 已被弃用(deprecated),推荐改用 Pillow(PIL) 或 imageio。但为兼容旧代码,仍可使用(部分版本会警告)。
plt.imread() —— 读取图像import matplotlib.pyplot as plt
img = plt.imread('photo.jpg') # 返回 numpy.ndarray (H, W, C)
print(img.shape) # 如 (480, 640, 3) 表示 RGB 图像float32(0~1)或 uint8(0~255),取决于文件✅ 推荐替代(现代方式):from PIL import Image import numpy as np img = np.array(Image.open('photo.jpg'))
plt.imshow() —— 显示图像plt.imshow(img)
plt.axis('off') # 关闭坐标轴(图像通常不需要)
plt.title("My Photo")
plt.show()参数 | 说明 |
|---|---|
| 颜色映射,用于灰度图,如 |
| 控制颜色范围(归一化) |
| 插值方式,如 |
✅ 显示灰度图示例:
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()
plt.imsave() —— 保存图像数组为图片文件plt.imsave('output.png', img, cmap='gray') # 若为灰度图需指定 cmap✅ 推荐替代:from PIL import Image Image.fromarray(img_uint8).save('output.png') # 注意 dtype 应为 uint8
函数 | 用途 |
|---|---|
| 创建新图形,设置尺寸(英寸) |
| 创建子图 |
| 一次性创建 figure + axes(推荐) |
| 自动调整子图间距,避免重叠 |
| 高清保存图像 |
| 关闭当前图形(防止内存泄漏) |
| 获取当前坐标轴 / 图形对象 |
| 设置坐标轴范围 |
| 自定义刻度标签 |
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()])
Seaborn 是基于 Matplotlib 的高级统计可视化库,语法更简洁,配色更美观。
pip install seabornimport 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()
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 | Matplotlib |
|---|---|---|
分布 |
|
|
相关性 |
|
|
分类比较 |
|
|
散点关系 |
|
|
✅ 建议:探索性数据分析用 Seaborn,精细控制或出版级图表用 Matplotlib 面向对象 API。
功能 | 推荐做法 |
|---|---|
读/写图像 | 优先用 |
显示图像/热力图 |
|
中文显示 |
|
美化图表 |
|
复杂布局 |
|
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
公众号:咚咚王
《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》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。