Matplotlib 全功能详解:从基础到实战案例

Matplotlib 是 Python 最经典、最常用的数据可视化库,核心作用是将数据转换为直观的图表(折线图、柱状图、散点图、直方图等),广泛用于数据分析、机器学习、科研绘图、报表生成等场景。

本文将系统讲解功能、安装、语法、核心参数,并提供8个真实业务场景案例,最后总结常见错误+使用注意事项


一、Matplotlib 核心功能

Matplotlib 是一个全方位绘图库,支持静态/动态/交互式图表,核心能力:

  1. 基础图表:折线图、柱状图、条形图、散点图、直方图、饼图、面积图
  2. 统计图表:箱线图、热力图、误差棒图、等高线图
  3. 3D 绘图:3D 折线、3D 散点、3D 曲面、3D 柱状图
  4. 子图布局:单图、多子图网格、不规则子图
  5. 图表美化:自定义颜色、字体、线条、标记、图例、坐标轴、网格
  6. 导出与展示:支持 PNG/PDF/SVG/JPG 导出,兼容 Jupyter/IDE/网页
  7. 高级功能:动画图表、交互式图表、与 Pandas/NumPy 无缝集成

二、安装方法

Matplotlib 是第三方库,需通过 pipconda 安装:

1. 标准安装(推荐)

pip install matplotlib

2. 国内镜像加速(解决下载慢)

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

3. Anaconda 环境安装

conda install matplotlib

4. 验证安装

运行以下代码,无报错即安装成功:

import matplotlib
print(matplotlib.__version__)  # 打印版本号

三、核心语法与基础结构

Matplotlib 有两种绘图语法pyplot 简易模式(新手首选)、面向对象模式(专业绘图首选)。

1. 标准绘图流程(万能模板)

# 1. 导入库
import matplotlib.pyplot as plt
import numpy as np

# 2. 准备数据
x = np.linspace(0, 10, 100)  # 生成x数据
y = np.sin(x)                # 生成y数据

# 3. 创建画布 + 绘图
plt.figure(figsize=(8, 4))    # 设置画布大小
plt.plot(x, y, label='sin(x)')# 绘制折线图

# 4. 图表装饰
plt.title('正弦函数曲线', fontsize=14)  # 标题
plt.xlabel('X轴', fontsize=12)          # X轴标签
plt.ylabel('Y轴', fontsize=12)          # Y轴标签
plt.legend()  # 显示图例
plt.grid(True, linestyle='--') # 显示网格

# 5. 展示/保存图表
plt.show()
# plt.savefig('sin.png', dpi=300) # 高清保存

2. 核心对象说明

  • plt.figure():创建画布,控制图表大小、分辨率
  • plt.plot()/plt.scatter() 等:绘制具体图表
  • plt.title/xlabel/ylabel:设置标题与坐标轴
  • plt.legend():显示图例
  • plt.grid():显示网格
  • plt.savefig():保存图片
  • plt.show():展示图片

四、常用核心参数(全)

1. 画布参数 figure()

参数 说明 示例
figsize 画布尺寸(宽,高),单位英寸 figsize=(10,6)
dpi 分辨率(默认100,高清300) dpi=300
facecolor 画布背景色 facecolor=‘white’

2. 绘图通用参数(plot/scatter/bar 等)

参数 说明 可选值
color/c 颜色 ‘r’,‘g’,‘b’,‘red’,‘green’,‘#FF0000’
label 图例名称 label=‘销量’
linewidth/lw 线条宽度 lw=2
linestyle/ls 线条样式 ‘-’,‘–’,‘-.’,‘:’
marker 数据点标记 ‘o’,‘*’,‘s’,‘^’
markersize/ms 标记大小 ms=5
alpha 透明度 0~1

3. 文字样式参数

参数 说明
fontsize 字体大小
fontfamily 字体
color 文字颜色
loc 标题/图例位置

4. 坐标轴参数

函数 作用
plt.xlim()/ylim() 设置坐标轴范围
plt.xticks()/yticks() 设置坐标轴刻度
plt.axis(‘equal’) 等比例坐标轴

五、8个实际应用案例(可直接运行)

案例1:折线图 —— 股票/气温趋势分析

适用场景:展示数据随时间变化趋势

import matplotlib.pyplot as plt
import numpy as np

# 数据:7天气温
days = np.arange(1,8)
temp = [22,24,23,25,27,26,23]

plt.figure(figsize=(8,4))
plt.plot(days, temp, color='orange', lw=2, marker='o', label='气温')
plt.title('一周气温变化趋势', fontsize=14)
plt.xlabel('日期')
plt.ylabel('温度(℃)')
plt.xticks(days)
plt.legend()
plt.grid(linestyle='--')
plt.show()

案例2:柱状图 —— 产品销量对比

适用场景:分类数据对比

import matplotlib.pyplot as plt

products = ['手机','电脑','平板','耳机']
sales = [120,90,75,150]

plt.figure(figsize=(7,5))
plt.bar(products, sales, color=['r','g','b','y'], alpha=0.7)
plt.title('电子产品季度销量', fontsize=14)
plt.xlabel('产品')
plt.ylabel('销量(台)')
# 显示数值标签
for x,y in zip(products,sales):
    plt.text(x,y+2,f'{y}',ha='center')
plt.show()

案例3:饼图 —— 消费结构占比

适用场景:展示各部分占总体比例

import matplotlib.pyplot as plt

labels = ['餐饮','交通','购物','娱乐','房租']
sizes = [20,10,15,10,45]
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0']

plt.figure(figsize=(6,6))
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
plt.title('月度消费占比')
plt.show()

案例4:散点图 —— 身高体重相关性分析

适用场景:分析两个变量的相关性

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randint(150,190,50) # 身高
y = x * 0.7 + np.random.randn(50)*5 # 体重

plt.figure(figsize=(8,5))
plt.scatter(x, y, color='blue', alpha=0.6)
plt.title('身高-体重散点图')
plt.xlabel('身高(cm)')
plt.ylabel('体重(kg)')
plt.grid(True)
plt.show()

案例5:直方图 —— 学生成绩分布

适用场景:展示数据分布规律

import matplotlib.pyplot as plt
import numpy as np

scores = np.random.normal(75,10,200) # 正态分布成绩

plt.figure(figsize=(8,4))
plt.hist(scores, bins=15, color='purple', alpha=0.7, edgecolor='black')
plt.title('学生成绩分布直方图')
plt.xlabel('成绩')
plt.ylabel('人数')
plt.show()

案例6:多子图 —— 数据综合对比报表

适用场景:同时展示多个图表

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,10,100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建2行1列子图
fig, (ax1, ax2) = plt.subplots(2,1,figsize=(8,6))

ax1.plot(x,y1,'r-')
ax1.set_title('sin(x)')
ax1.grid()

ax2.plot(x,y2,'b--')
ax2.set_title('cos(x)')
ax2.grid()

plt.tight_layout() # 自动调整间距
plt.show()

案例7:热力图 —— 相关性矩阵

适用场景:展示变量间相关程度

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(5,5) # 5x5矩阵

plt.figure(figsize=(7,5))
plt.imshow(data, cmap='Blues')
plt.colorbar() # 颜色条
plt.title('变量相关性热力图')
plt.show()

案例8:3D 散点图 —— 三维数据分析

适用场景:三维数据可视化

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111, projection='3d')

x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50)

ax.scatter(x,y,z, c='r', marker='o')
ax.set_title('3D 散点图')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

六、Matplotlib 常见错误与解决方案

1. 中文显示乱码(方框/问号)

原因:Matplotlib 默认不支持中文字体
解决方案

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False   # 解决负号显示问题

2. 图表不显示

  • Jupyter:添加 %matplotlib inline
  • PyCharm:必须写 plt.show()
  • 保存图片需放在 plt.show() 之前

3. 图例/标题不显示

  • 忘记写 plt.legend()
  • 绘图时未设置 label 参数

4. 保存图片模糊

  • 解决方案:plt.savefig('test.png', dpi=300, bbox_inches='tight')

5. 子图重叠

  • 解决方案:plt.tight_layout()

6. 数据类型错误

  • 传入非数值型数据会报错,确保数据是 int/float/list/np.array

七、使用注意事项(避坑指南)

  1. 代码顺序:先绘图,再装饰(标题、坐标轴),最后展示/保存
  2. 中文必配字体:否则图表中文全乱码
  3. 画布大小:数据密集时调大 figsize,避免拥挤
  4. 颜色规范:正式图表避免高饱和刺眼颜色,推荐 # 色值
  5. 图例与标签:所有图表必须加标签,保证可读性
  6. 保存优先plt.savefig() 必须在 plt.show() 之前
  7. 性能优化:大数据量用 NumPy 数组,避免纯列表
  8. 版本兼容:3.x 版本语法最稳定,不建议使用过时 1.x 语法

总结

  1. Matplotlib 是 Python 可视化基础核心库,支持几乎所有图表类型
  2. 安装简单:pip install matplotlib,核心语法固定(创建→绘图→装饰→展示)
  3. 8个案例覆盖趋势、对比、占比、分布、多维、3D等全场景
  4. 最常见问题:中文乱码、图表不显示、图片模糊,按文中方案可快速解决
  5. 遵循规范:加标签、调字体、设尺寸、高清保存,图表专业度大幅提升

《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。
在这里插入图片描述

更多推荐