首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >人工智能之数据分析 Matplotlib:第五章 常见函数

人工智能之数据分析 Matplotlib:第五章 常见函数

原创
作者头像
咚咚王
发布2025-11-30 18:50:31
发布2025-11-30 18:50:31
1090
举报

人工智能之数据分析 Matplotlib

第五章 常见函数


前言

在 Matplotlib 中,除了常用的 plotscatterbar 等绘图函数外,还有一些图像处理样式控制相关的常用函数,如 imshowimsaveimread,以及解决中文显示问题的方法。此外,Seaborn 作为基于 Matplotlib 的高级可视化库,也常与之配合使用。

本文将系统介绍这些内容:


一、Matplotlib 图像处理三剑客:imread / imshow / imsave

⚠️ 注意:从 Matplotlib 3.6 ,matplotlib.pyplot.imread 和 imsave 已被弃用(deprecated),推荐改用 Pillow(PIL) 或 imageio。但为兼容旧代码,仍可使用(部分版本会警告)。

1. plt.imread() —— 读取图像

代码语言:python
复制
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() —— 显示图像

代码语言:python
复制
plt.imshow(img)
plt.axis('off')  # 关闭坐标轴(图像通常不需要)
plt.title("My Photo")
plt.show()

常用参数:

参数

说明

cmap

颜色映射,用于灰度图,如 'gray', 'viridis'

vmin, vmax

控制颜色范围(归一化)

interpolation

插值方式,如 'nearest', 'bilinear'

✅ 显示灰度图示例:

代码语言:python
复制
gray_img = plt.imread('lena.png')  # 假设是单通道
plt.imshow(gray_img, cmap='gray')

✅ 显示热力图(矩阵):

代码语言:python
复制
data = np.random.rand(10, 10)
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()

3. plt.imsave() —— 保存图像数组为图片文件

代码语言:python
复制
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 默认不支持中文字体,直接使用中文会导致 方框或乱码

✅ 方法一:全局设置中文字体(推荐)

代码语言:python
复制
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()

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

代码语言:python
复制
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 的高级统计可视化库,语法更简洁,配色更美观。

安装

代码语言:bash
复制
pip install seaborn

基本用法

代码语言:python
复制
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 参数:
代码语言:python
复制
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,后续会逐步更新。

资料关注

公众号:咚咚王

《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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 人工智能之数据分析 Matplotlib
  • 前言
  • 一、Matplotlib 图像处理三剑客:imread / imshow / imsave
    • 1. plt.imread() —— 读取图像
    • 2. plt.imshow() —— 显示图像
      • 常用参数:
    • 3. plt.imsave() —— 保存图像数组为图片文件
  • 二、其他常见 Matplotlib 函数
  • 三、中文显示问题解决方案
    • ✅ 方法一:全局设置中文字体(推荐)
    • ✅ 方法二:指定字体路径(跨平台通用)
  • 四、Matplotlib 与 Seaborn 协同使用
    • 安装
    • 基本用法
    • 混合使用技巧
    • 常用 Seaborn 函数 vs Matplotlib
  • 总结
  • 后续
  • 资料关注
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档