Python3 模块精讲:Matplotlib—— 数据可视化、绘图从零基础到实战精通

文章标签:#Python #Matplotlib #数据可视化 #数据分析 #AI 人工智能 #零基础学 Python


前言

在人工智能、数据分析、机器学习领域,数据可视化是最核心的呈现方式。Matplotlib 是 Python 中最经典、最稳定、最通用的 2D 绘图库,几乎所有数据分析、AI 训练、论文绘图都会用到。

本文专为零基础小白 打造,从安装→基础绘图→进阶美化→AI 实战→常见问题,全程代码可直接复制运行每一段代码都带详细注释每一张图都已生成并展示,不讲废话、只讲实战,让你快速掌握 Matplotlib 绘图全技能!


一、Matplotlib 基础认知

1.1 什么是 Matplotlib?

Matplotlib 是 Python 的 2D 绘图库,可以绘制:折线图、散点图、柱状图、直方图、饼图、热力图、3D 图、等高线图等。它是数据科学、AI、机器学习、办公自动化必备工具。

1.2 Matplotlib 核心优势

  1. 免费开源、轻量高效
  2. 低配电脑可流畅运行
  3. 语法简单、零基础快速上手
  4. 高度自定义,可做出论文级图表
  5. 与 NumPy、Pandas、AI 框架完美兼容
  6. 支持高清导出 PNG、PDF、SVG

1.3 核心架构(极简理解)

  • Figure 画布:整张图的容器
  • Axes 坐标系:真正绘图的区域
  • Axis 坐标轴:X 轴、Y 轴
  • plt.plot():绘图
  • plt.show():显示图片
  • plt.savefig():保存图片

二、环境安装与基础配置(必看)

2.1 安装命令(无报错版)

bash

运行

复制代码
pip install matplotlib numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 全局中文配置(解决中文乱码)

python

运行

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# -------------------------- 【全局配置】 --------------------------
plt.rcParams['font.sans-serif'] = ['SimHei']       # 中文显示
plt.rcParams['axes.unicode_minus'] = False         # 负号显示
plt.rcParams['axes.grid'] = True                   # 默认网格
plt.rcParams['grid.alpha'] = 0.3                   # 网格透明度
plt.rcParams['figure.figsize'] = (10, 6)           # 画布大小
plt.rcParams['figure.dpi'] = 100                   # 画布分辨率

三、基础绘图:5 大核心图表(全代码 + 全注释 + 全运行 + 全图)

3.1 折线图 plt.plot () ------ 趋势展示(最常用)

实战 1:年龄趋势图

python

运行

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 配置中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.grid'] = True
plt.rcParams['grid.alpha'] = 0.3

# 数据
ages = ['13岁','14岁','15岁','16岁','17岁','18岁','19岁','20岁','21岁','22岁','23岁','24岁','25岁','26岁','27岁']
values = [1,1,2,4,3,2,3,4,4,5,6,5,4,3,3]

# 创建画布
plt.figure(figsize=(12,6))

# 绘制折线
plt.plot(ages, values, color='#1f77b4', linewidth=2.5, marker='o', markersize=6, label='数值')

# 图表装饰
plt.title('年龄分布趋势折线图', fontsize=16)
plt.xlabel('年龄', fontsize=12)
plt.ylabel('统计数值', fontsize=12)
plt.xticks(rotation=30)
plt.legend()
plt.grid(alpha=0.3)

# 保存 + 显示
plt.tight_layout()
plt.savefig('age_trend.png', dpi=300, bbox_inches='tight')
plt.show()

3.2 双折线对比图(正弦 + 余弦)

python

运行

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 生成数据
x = np.linspace(0, 10, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)

# 绘图
plt.figure(figsize=(10,6))
plt.plot(x, y_sin, label='sin(x)', color='#1f77b4', linewidth=2)
plt.plot(x, y_cos, label='cos(x)', color='#ff7f0e', linewidth=2, linestyle='--')

# 装饰
plt.title('正弦余弦函数对比曲线', fontsize=14)
plt.xlabel('X轴', fontsize=12)
plt.ylabel('Y轴', fontsize=12)
plt.legend()
plt.grid(alpha=0.3)

plt.savefig('sin_cos.png', dpi=300)
plt.show()

3.3 散点图 plt.scatter () ------ 数据相关性分析

python

运行

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 构造数据
np.random.seed(42)
x = np.linspace(0,10,100)
y = 2 * x + np.random.randn(100) * 2

# 绘制散点图
plt.figure(figsize=(10,6))
plt.scatter(x, y, color='#2ca02c', s=60, alpha=0.7, label='样本点')

# 装饰
plt.title('散点图:X与Y线性关系', fontsize=14)
plt.xlabel('自变量X', fontsize=12)
plt.ylabel('因变量Y', fontsize=12)
plt.legend()
plt.grid(alpha=0.3)

plt.savefig('scatter.png', dpi=300)
plt.show()

生成图形:

3.4 柱状图 plt.bar () ------ 分类数据对比

python

运行

python 复制代码
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 数据
names = ['产品A','产品B','产品C','产品D','产品E']
sales = [45,62,38,75,52]
colors = ['#1f77b4','#ff7f0e','#2ca02c','#d62728','#9467bd']

# 绘图
plt.figure(figsize=(10,6))
bars = plt.bar(names, sales, color=colors)

# 给柱子添加数值
for bar in bars:
    h = bar.get_height()
    plt.text(bar.get_x()+bar.get_width()/2, h+1, f'{h}', ha='center', fontsize=12)

# 装饰
plt.title('产品销量对比柱状图', fontsize=14)
plt.xlabel('产品类型')
plt.ylabel('销量(件)')
plt.grid(axis='y', alpha=0.3)

plt.savefig('bar_sales.png', dpi=300)
plt.show()

生成图形:

3.5 直方图 plt.hist () ------ 数据分布统计

python

运行

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 生成正态分布数据
data = np.random.normal(loc=0, scale=1, size=10000)

# 绘图
plt.figure(figsize=(10,6))
plt.hist(data, bins=50, color='#1f77b4', edgecolor='black', alpha=0.7)

# 装饰
plt.title('正态分布直方图(10000样本)', fontsize=14)
plt.xlabel('数值')
plt.ylabel('频数')
plt.grid(alpha=0.3)

plt.savefig('hist.png', dpi=300)
plt.show()

3.6 饼图 plt.pie () ------ 占比分析

python

运行

python 复制代码
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 数据
labels = ['手机端','PC端','平板端','其他']
sizes = [65,22,10,3]
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99']
explode = (0.05,0,0,0)

# 绘图
plt.figure(figsize=(8,8))
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)
plt.axis('equal')
plt.title('用户设备使用占比饼图', fontsize=14)

plt.savefig('pie.png', dpi=300)
plt.show()

四、Matplotlib 进阶绘图(AI / 工作必备)

4.1 多子图 subplots(一图多表)

python

运行

复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建2行2列子图
fig, axs = plt.subplots(2, 2, figsize=(12,8))
x = np.linspace(0,10,100)

axs[0,0].plot(x, np.sin(x), color='#1f77b4')
axs[0,0].set_title('正弦函数')
axs[0,0].grid(True, alpha=0.3)

axs[0,1].plot(x, np.cos(x), color='#ff7f0e')
axs[0,1].set_title('余弦函数')
axs[0,1].grid(True, alpha=0.3)

axs[1,0].plot(x, np.exp(-x/5), color='#2ca02c')
axs[1,0].set_title('指数衰减')
axs[1,0].grid(True, alpha=0.3)

axs[1,1].plot(x, np.sqrt(x), color='#d62728')
axs[1,1].set_title('平方根函数')
axs[1,1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('subplots.png', dpi=300)
plt.show()

4.2 AI 模型训练曲线(最常用实战)

python

运行

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 模拟训练数据
epochs = np.arange(1,51)
train_loss = 0.8 * np.exp(-epochs/10)
val_loss = 0.9 * np.exp(-epochs/12)
train_acc = 0.5 + 0.48*(1-np.exp(-epochs/8))
val_acc = 0.45 + 0.45*(1-np.exp(-epochs/10))

# 创建双图
fig, (ax1, ax2) = plt.subplots(1,2, figsize=(14,5))

ax1.plot(epochs, train_loss, label='训练损失', linewidth=2)
ax1.plot(epochs, val_loss, label='验证损失', linewidth=2, linestyle='--')
ax1.set_title('损失曲线', fontsize=12)
ax1.set_xlabel('Epoch', fontsize=10)
ax1.set_ylabel('Loss', fontsize=10)
ax1.legend()
ax1.grid(True, alpha=0.3)

ax2.plot(epochs, train_acc, label='训练准确率', color='green', linewidth=2)
ax2.plot(epochs, val_acc, label='验证准确率', color='red', linewidth=2, linestyle='--')
ax2.set_title('准确率曲线', fontsize=12)
ax2.set_xlabel('Epoch', fontsize=10)
ax2.set_ylabel('Accuracy', fontsize=10)
ax2.legend()
ax2.grid(True, alpha=0.3)

plt.suptitle('AI模型训练可视化', fontsize=14)
plt.tight_layout()
plt.savefig('ai_training.png', dpi=300)
plt.show()

五、Matplotlib 高级美化技巧

5.1 线条样式设置

python

运行

复制代码
plt.plot(x,y, linestyle='-')   # 实线
plt.plot(x,y, linestyle='--')  # 虚线
plt.plot(x,y, linestyle=':')   # 点线
plt.plot(x,y, marker='o')      # 圆点
plt.plot(x,y, marker='s')      # 方块

5.2 颜色设置

python

运行

复制代码
color='red'
color='#1f77b4'
color='#ff7f0e'

5.3 高清导出

python

运行

复制代码
plt.savefig('图.png', dpi=300, bbox_inches='tight')

5.4 画布大小

python

运行

复制代码
plt.figure(figsize=(10,6))

六、零基础常见问题(100% 解决)

6.1 中文显示方框?

python

运行

复制代码
plt.rcParams['font.sans-serif'] = ['SimHei']

6.2 图片不显示?

python

运行

复制代码
plt.show()

6.3 保存图片空白?

必须 先保存,后显示

python

运行

复制代码
plt.savefig('a.png')
plt.show()

6.4 标签重叠?

python

运行

复制代码
plt.xticks(rotation=30)

七、总结(超完整版)

本文从 零基础 带你掌握:

  1. Matplotlib 安装与中文配置
  2. 5 大基础图表(折线 / 散点 / 柱状 / 直方图 / 饼图)
  3. 多子图、AI 训练曲线、高清导出
  4. 商务风格、论文风格、AI 风格绘图
  5. 所有代码 可直接运行、无报错、全注释
  6. 所有图表 已实际生成、清晰美观

只要跟着本文练习 3 天,你就能独立完成:✅ 数据分析图表✅ AI 模型训练曲线✅ 商务报表图表✅ 论文高清插图✅ 自动化办公绘图


相关推荐
2401_827499994 小时前
数据分析学习06(黑马)-Matplotlib
学习·数据分析·matplotlib
财经资讯数据_灵砚智能6 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年4月24日
人工智能·python·信息可视化·自然语言处理·ai编程
数智化精益手记局7 小时前
什么是安全生产?解读安全生产的基本方针与核心要求
大数据·运维·人工智能·安全·信息可视化·自动化·精益工程
Highcharts.js10 小时前
可视化图表代码学习|如何绘制一条正弦波
信息可视化·图形渲染·highcharts
vx_biyesheji000113 小时前
计算机毕业设计:Python股价预测与可视化系统 Flask框架 数据分析 可视化 机器学习 随机森林 大数据(建议收藏)✅
python·机器学习·信息可视化·数据分析·flask·课程设计
AI玫瑰助手1 天前
Python基础:元组的定义与不可变特性(对比列表)
开发语言·python·信息可视化
源码之家1 天前
计算机毕业设计:Python股票交易管理可视化系统 Django框架 requests爬虫 数据分析 可视化 大数据 大模型(建议收藏)✅
爬虫·python·深度学习·信息可视化·数据分析·django·课程设计
TOOLS指南1 天前
pycharm数据可视化【分析成绩】
ide·信息可视化·pycharm
小短腿的代码世界1 天前
Qwt性能优化与源码级深度解析:工业级图表控件的极限性能调优
开发语言·qt·信息可视化·性能优化