人工智能之数据分析 Matplotlib
第六章 知识总结
文章目录
- [人工智能之数据分析 Matplotlib](#人工智能之数据分析 Matplotlib)
- 前言
- 一、核心架构
- 二、两种绘图风格
- [1. Pyplot 风格(命令式)](#1. Pyplot 风格(命令式))
- [2. 面向对象风格(推荐用于脚本/项目)](#2. 面向对象风格(推荐用于脚本/项目))
- 三、常用图表类型与函数
- 四、关键定制功能
- [1. 标题与标签](#1. 标题与标签)
- [2. 刻度与网格](#2. 刻度与网格)
- [3. 图例](#3. 图例)
- [4. 颜色与样式](#4. 颜色与样式)
- [5. 多子图](#5. 多子图)
- 五、图像处理(谨慎使用)
- 六、中文显示解决方案
- [七、与 Seaborn 协同](#七、与 Seaborn 协同)
- 八、最佳实践
- 九、常用配置速查
- 十、调试技巧
- 后续
- 资料关注
前言
本文对之前的关于matplotlib的知识进行系统性总结,便于知识梳理和归纳,为后续打好基础,或者面试使用
一、核心架构
Matplotlib 采用 三层架构:
-
Backend(后端)
-
负责图形渲染和输出(如
TkAgg、Qt5Agg、Agg(无界面)等) -
通常无需手动设置,除非在服务器环境:
pythonimport matplotlib matplotlib.use('Agg') # 必须在 import pyplot 前设置
-
-
Artist Layer(艺术家层)
- 所有可视元素(Figure、Axes、Line、Text 等)都是 Artist 对象
- 面向对象 API 操作此层
-
Scripting Layer(脚本层)---
pyplot- 提供类似 MATLAB 的简单接口(如
plt.plot()) - 自动管理当前 Figure 和 Axes
- 提供类似 MATLAB 的简单接口(如
✅ 建议 :简单绘图用
pyplot,复杂/可复用图表用 面向对象 API (fig, ax = plt.subplots())
二、两种绘图风格
1. Pyplot 风格(命令式)
python
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 2])
plt.title("Title")
plt.show()
- 适合交互式探索(如 Jupyter Notebook)
- 隐式操作"当前"图形
2. 面向对象风格(推荐用于脚本/项目)
python
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 2])
ax.set_title("Title")
plt.show()
- 显式控制每个组件
- 支持多子图、精细定制、避免状态混乱
三、常用图表类型与函数
| 图表类型 | 函数 | 典型用途 |
|---|---|---|
| 折线图 | ax.plot(x, y) |
趋势、时间序列 |
| 散点图 | ax.scatter(x, y, c=..., s=...) |
变量关系、聚类 |
| 柱状图 | ax.bar(categories, values) |
类别比较 |
| 水平柱状图 | ax.barh(...) |
类别名较长时 |
| 饼图 | ax.pie(sizes, labels=..., autopct=...) |
构成比例(≤5类) |
| 直方图 | ax.hist(data, bins=...) |
数据分布 |
| 箱线图 | ax.boxplot(data) |
分布离散度、异常值 |
| 热力图 | ax.imshow(matrix, cmap=...) 或 sns.heatmap() |
矩阵、相关性 |
| 填充面积图 | ax.fill_between(x, y1, y2) |
区间范围 |
四、关键定制功能
1. 标题与标签
python
ax.set_title("Main Title", fontsize=14)
ax.set_xlabel("X Label")
ax.set_ylabel("Y Label")
2. 刻度与网格
python
ax.set_xticks([0, 1, 2])
ax.set_xticklabels(['A', 'B', 'C'])
ax.grid(True, linestyle='--', alpha=0.5)
3. 图例
python
ax.plot(x, y1, label='Series 1')
ax.plot(x, y2, label='Series 2')
ax.legend(loc='upper left')
4. 颜色与样式
- 颜色:
color='red'、'#FF5733'、[0.1, 0.8, 0.3] - 线型:
linestyle='--'或ls=':' - 标记:
marker='o',markersize=8
5. 多子图
python
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
axs[0, 0].plot(...)
plt.tight_layout() # 自动防重叠
五、图像处理(谨慎使用)
⚠️
plt.imread/imsave已弃用,建议用 Pillow 或 imageio
| 功能 | 推荐方式 |
|---|---|
| 读图 | np.array(Image.open('img.jpg')) |
| 显示 | ax.imshow(img) |
| 保存 | Image.fromarray(arr).save('out.png') |
六、中文显示解决方案
python
# 方法1:全局设置(Windows)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示
# 方法2:指定字体路径(跨平台)
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="/path/to/simhei.ttf")
ax.set_title("标题", fontproperties=my_font)
七、与 Seaborn 协同
-
Seaborn 是 Matplotlib 的高级封装,默认使用 Matplotlib 渲染
-
设置 Seaborn 样式会影响后续所有 Matplotlib 图:
pythonsns.set_style("whitegrid") sns.set_palette("Set2") -
混合使用:
pythonfig, ax = plt.subplots() sns.boxplot(data=df, x='category', y='value', ax=ax) ax.set_title("Custom Title via Matplotlib")
八、最佳实践
✅ Do's
- 使用
figsize控制画布大小 - 用
dpi=300+bbox_inches='tight'保存高清图 - 多子图用
plt.subplots()+tight_layout() - 复杂图表优先用面向对象 API
- 探索数据时结合 Seaborn 快速出图
❌ Don'ts
- 不要写
plt.plot(...)(...是 Ellipsis,会报错!) - 避免在循环中不关闭图形(内存泄漏)→ 用
plt.close() - 饼图类别 > 5 时改用条形图
- 不要在服务器环境使用交互式后端(如 Tkinter)
九、常用配置速查
python
# 全局设置示例
plt.rcParams.update({
'figure.figsize': (10, 6),
'font.size': 12,
'lines.linewidth': 2,
'axes.grid': True,
'axes.spines.top': False,
'axes.spines.right': False
})
十、调试技巧
- 查看当前后端:
matplotlib.get_backend() - 列出可用字体:
matplotlib.font_manager.findSystemFonts() - 清空当前图:
plt.clf();关闭窗口:plt.close() - Jupyter 内联显示:
%matplotlib inline
📌 一句话总结 :
"简单用 pyplot,复杂用 axes;中文设字体,多图用 subplots;高清靠 savefig,美观靠 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》