人工智能之数据分析 Matplotlib

第六章 知识总结


@


前言

本文对之前的关于matplotlib的知识进行系统性总结,便于知识梳理和归纳,为后续打好基础,或者面试使用


一、核心架构

Matplotlib 采用 三层架构

  1. Backend(后端)

    • 负责图形渲染和输出(如 TkAggQt5AggAgg(无界面)等)
    • 通常无需手动设置,除非在服务器环境:
      import matplotlib
      matplotlib.use('Agg')  # 必须在 import pyplot 前设置
      
  2. Artist Layer(艺术家层)

    • 所有可视元素(Figure、Axes、Line、Text 等)都是 Artist 对象
    • 面向对象 API 操作此层
  3. Scripting Layer(脚本层)— pyplot

    • 提供类似 MATLAB 的简单接口(如 plt.plot()
    • 自动管理当前 Figure 和 Axes

建议:简单绘图用 pyplot,复杂/可复用图表用 面向对象 APIfig, ax = plt.subplots()


二、两种绘图风格

1. Pyplot 风格(命令式)

import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 2])
plt.title("Title")
plt.show()
  • 适合交互式探索(如 Jupyter Notebook)
  • 隐式操作“当前”图形

2. 面向对象风格(推荐用于脚本/项目)

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. 标题与标签

ax.set_title("Main Title", fontsize=14)
ax.set_xlabel("X Label")
ax.set_ylabel("Y Label")

2. 刻度与网格

ax.set_xticks([0, 1, 2])
ax.set_xticklabels(['A', 'B', 'C'])
ax.grid(True, linestyle='--', alpha=0.5)

3. 图例

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. 多子图

fig, axs = plt.subplots(2, 2, figsize=(10, 8))
axs[0, 0].plot(...)
plt.tight_layout()  # 自动防重叠

五、图像处理(谨慎使用)

⚠️ plt.imread / imsave 已弃用,建议用 Pillowimageio

功能 推荐方式
读图 np.array(Image.open('img.jpg'))
显示 ax.imshow(img)
保存 Image.fromarray(arr).save('out.png')

六、中文显示解决方案

# 方法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 图:
    sns.set_style("whitegrid")
    sns.set_palette("Set2")
    
  • 混合使用:
    fig, 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)

九、常用配置速查

# 全局设置示例
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》

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