Python之matplotlib包语法、参数和实际应用案例
·
Matplotlib 全功能详解:从基础到实战案例
Matplotlib 是 Python 最经典、最常用的数据可视化库,核心作用是将数据转换为直观的图表(折线图、柱状图、散点图、直方图等),广泛用于数据分析、机器学习、科研绘图、报表生成等场景。
本文将系统讲解功能、安装、语法、核心参数,并提供8个真实业务场景案例,最后总结常见错误+使用注意事项。
一、Matplotlib 核心功能
Matplotlib 是一个全方位绘图库,支持静态/动态/交互式图表,核心能力:
- 基础图表:折线图、柱状图、条形图、散点图、直方图、饼图、面积图
- 统计图表:箱线图、热力图、误差棒图、等高线图
- 3D 绘图:3D 折线、3D 散点、3D 曲面、3D 柱状图
- 子图布局:单图、多子图网格、不规则子图
- 图表美化:自定义颜色、字体、线条、标记、图例、坐标轴、网格
- 导出与展示:支持 PNG/PDF/SVG/JPG 导出,兼容 Jupyter/IDE/网页
- 高级功能:动画图表、交互式图表、与 Pandas/NumPy 无缝集成
二、安装方法
Matplotlib 是第三方库,需通过 pip 或 conda 安装:
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
七、使用注意事项(避坑指南)
- 代码顺序:先绘图,再装饰(标题、坐标轴),最后展示/保存
- 中文必配字体:否则图表中文全乱码
- 画布大小:数据密集时调大
figsize,避免拥挤 - 颜色规范:正式图表避免高饱和刺眼颜色,推荐
#色值 - 图例与标签:所有图表必须加标签,保证可读性
- 保存优先:
plt.savefig()必须在plt.show()之前 - 性能优化:大数据量用
NumPy数组,避免纯列表 - 版本兼容:3.x 版本语法最稳定,不建议使用过时 1.x 语法
总结
- Matplotlib 是 Python 可视化基础核心库,支持几乎所有图表类型
- 安装简单:
pip install matplotlib,核心语法固定(创建→绘图→装饰→展示) - 8个案例覆盖趋势、对比、占比、分布、多维、3D等全场景
- 最常见问题:中文乱码、图表不显示、图片模糊,按文中方案可快速解决
- 遵循规范:加标签、调字体、设尺寸、高清保存,图表专业度大幅提升
《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。
更多推荐
所有评论(0)