Matplotlib 核心类与常用函数使用说明(精准聚焦高频场景)
以下按「核心类 → 常用函数 → 实战示例」结构,聚焦实际开发中80%场景用到的功能,明确类与函数的调用关系、参数含义,避开冗余细节:
一、核心类(基础骨架,必须掌握)
2. Axes 类(子图/绘图区域)
- 作用:实际绘图的“容器”,包含x轴、y轴、数据线条、标签等,所有绘图操作的核心对象。
- 创建方式:
# 方式1:通过Figure创建
fig = plt.figure()
ax = fig.add_subplot(1,1,1) # 1行1列唯一子图
# 方式2:快捷创建(推荐)
fig, ax = plt.subplots() # 等价于上面两行
fig, (ax1, ax2) = plt.subplots(1,2) # 1行2列,返回两个Axes对象
- 常用方法(绘图+美化):
| 功能 |
方法 |
核心参数 |
| 绘图 |
ax.plot(x,y)(折线图) |
color(颜色)、linewidth(线宽)、label(图例标识) |
|
ax.scatter(x,y)(散点图) |
s(点大小)、c(颜色)、alpha(透明度) |
|
ax.bar(x, height)(柱状图) |
width(柱宽)、color、edgecolor(边框色) |
| 坐标轴设置 |
ax.set_xlabel()/set_ylabel() |
fontsize(字体大小)、labelpad(与轴的间距) |
|
ax.set_xlim(min, max)/set_ylim() |
设置轴的显示范围 |
|
ax.set_xticks(ticks)/set_yticks() |
自定义刻度位置(如ax.set_xticks([0,2,4])) |
| 标题与图例 |
ax.set_title() |
fontsize、pad(与图表间距) |
|
ax.legend() |
loc(位置,如'best'/'upper right')、fontsize |
| 网格与背景 |
ax.grid(True) |
alpha(透明度)、linestyle(线型,如'--') |
|
ax.set_facecolor('#f8f8f8') |
设置子图背景色 |
3. Axis 类(单个坐标轴)
二、常用辅助函数(plt接口,便捷操作)
plt 是Matplotlib的便捷接口,本质是对“当前Figure/Axes”的封装,适合快速绘图,核心函数如下:
| 函数 |
功能 |
对应Axes方法(推荐) |
plt.figure() |
创建Figure对象 |
—— |
plt.plot(x,y) |
绘制折线图(自动绑定当前Axes) |
ax.plot(x,y) |
plt.xlabel()/plt.ylabel() |
设置坐标轴标签 |
ax.set_xlabel()/ax.set_ylabel() |
plt.title() |
设置子图标题 |
ax.set_title() |
plt.legend() |
显示图例 |
ax.legend() |
plt.xlim()/plt.ylim() |
设置轴范围 |
ax.set_xlim()/ax.set_ylim() |
plt.grid() |
显示网格 |
ax.grid() |
plt.show() |
显示图像窗口 |
—— |
plt.savefig() |
保存图像 |
fig.savefig() |
plt.tight_layout() |
自动调整子图布局(避免标签截断) |
—— |
plt.rcParams[] |
全局配置(如中文、字体) |
—— |
关键提醒:plt接口 vs Axes接口
- 简单绘图(单图):
plt 接口更便捷(如plt.plot()+plt.show());
- 复杂绘图(多子图、自定义样式):优先用
Axes 接口(ax.xxx),避免“画错子图”;
- 示例对比:
# plt接口(快速单图)
plt.plot(x, y, color='red')
plt.xlabel('X')
plt.show()
# Axes接口(精准控制)
fig, ax = plt.subplots(1,2)
ax[0].plot(x, y1) # 第1个子图
ax[1].plot(x, y2, color='red') # 第2个子图
ax[0].set_xlabel('X1')
ax[1].set_xlabel('X2')
plt.show()
三、高频参数速查(通用规则)
1. 颜色(color)参数
- 支持格式:
- 英文单词:
'red'/'blue'/'green';
- 十六进制:
'#FF0000'(红色)、'#2F4F4F'(深灰色);
- RGB/RGBA:
(1,0,0)(红色)、(1,0,0,0.5)(半透明红色);
- 缩写:
'r'(红)、'g'(绿)、'b'(蓝)、'k'(黑)、'w'(白)。
2. 线型(linestyle)参数
- 常用值:
'-'(实线,默认)、'--'(虚线)、':'(点线)、'-.'(点划线)。
3. 透明度(alpha)参数
- 取值范围:01(0完全透明,1不透明),常用0.30.8(避免遮挡数据)。
四、实战示例(整合核心类与函数)
import matplotlib.pyplot as plt
import numpy as np
# 1. 全局配置(中文+负号显示)
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows中文
plt.rcParams['axes.unicode_minus'] = False
# 2. 创建Figure和Axes(2行1列子图)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 6), dpi=100)
fig.suptitle('Matplotlib核心类实战示例', fontsize=16, pad=20) # 全局标题
# 3. 生成测试数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 4. 子图1:折线图(设置颜色、线型、标签)
ax1.plot(x, y1, color='#FF6B6B', linewidth=2, linestyle='-', label='sin(x)')
ax1.set_xlabel('x(弧度)', fontsize=12)
ax1.set_ylabel('y值', fontsize=12)
ax1.set_title('正弦函数', fontsize=14)
ax1.legend(loc='upper right', fontsize=10)
ax1.grid(alpha=0.3, linestyle='--')
ax1.set_xlim(0, 10) # x轴范围0~10
# 5. 子图2:散点图(设置点大小、颜色、透明度)
ax2.scatter(x, y2, s=30, c='#4ECDC4', alpha=0.6, label='cos(x)')
ax2.set_xlabel('x(弧度)', fontsize=12)
ax2.set_ylabel('y值', fontsize=12)
ax2.set_title('余弦函数(散点图)', fontsize=14)
ax2.legend(loc='best', fontsize=10)
ax2.grid(alpha=0.3, linestyle=':')
# 6. 调整布局+保存+显示
plt.tight_layout() # 避免标签截断
fig.savefig('matplotlib_demo.png', dpi=150, bbox_inches='tight')
plt.show()
五、使用原则总结
- 先创建
Figure 和 Axes,再调用 ax.xxx 绘图(复杂场景优先);
- 相同功能优先用
Axes 接口(如ax.set_xlabel()),比 plt 接口更精准;
- 参数遵循“通用规则”(颜色、线型、透明度等参数格式一致),无需死记硬背;
- 保存图片时,先
fig.savefig() 再 plt.show(),避免保存空白。
Matplotlib 核心类与函数速查表
目录
- 核心类(Figure/Axes/Axis)
- 常用绘图函数
- 图表美化函数
- 数据格式适配
- 保存与显示函数
- 常见问题速查
一、核心类(基础骨架)
| 功能 |
代码示例 |
关键参数说明 |
| 创建画布 |
fig = plt.figure(figsize=(8,4), dpi=100, facecolor='white') |
figsize:(宽,高)英寸;dpi:分辨率;facecolor:背景色 |
| 添加子图(Axes) |
ax = fig.add_subplot(2,2,1) 或 fig, ax = plt.subplots(2,2) |
nrows/ncols:子图行列数;index:子图索引(从1开始) |
| 全局标题 |
fig.suptitle('全局标题', fontsize=16, pad=20) |
pad:与子图间距;fontsize:字体大小 |
| 保存图片 |
fig.savefig('output.png', dpi=150, bbox_inches='tight') |
bbox_inches='tight':裁剪空白;dpi:保存分辨率(建议≥150) |
2. Axes 类(绘图区域)
| 功能 |
代码示例 |
关键参数说明 |
| 折线图 |
ax.plot(x, y, color='red', linewidth=2, label='曲线1') |
color:颜色;linewidth:线宽;label:图例标识 |
| 散点图 |
ax.scatter(x, y, s=50, c='blue', alpha=0.6) |
s:点大小;alpha:透明度(0-1);c:颜色 |
| 柱状图 |
ax.bar(x, height, width=0.6, edgecolor='black') |
width:柱宽;edgecolor:边框色 |
| 坐标轴标签 |
ax.set_xlabel('X轴', fontsize=12, labelpad=5) |
labelpad:与轴的间距;fontsize:字体大小 |
| 轴范围设置 |
ax.set_xlim(0, 10) / ax.set_ylim(-5, 5) |
直接指定轴的最小值和最大值 |
| 标题与图例 |
ax.set_title('子图标题', fontsize=14) / ax.legend(loc='upper right') |
loc:图例位置(best/upper left等) |
| 网格设置 |
ax.grid(True, alpha=0.3, linestyle='--') |
linestyle:线型(-/--/:);alpha:透明度 |
3. Axis 类(单个坐标轴)
| 功能 |
代码示例 |
关键参数说明 |
| 刻度标签样式 |
ax.xaxis.set_tick_params(labelsize=10, rotation=45) |
rotation:标签旋转角度;labelsize:字体大小 |
| 自定义刻度位置 |
ax.xaxis.set_major_locator(plt.MultipleLocator(2)) |
MultipleLocator(n):每n个单位显示1个刻度 |
| 坐标轴颜色 |
ax.xaxis.set_linewidth(1.5) / ax.xaxis.set_color('red') |
设置轴的线条宽度和颜色 |
二、常用绘图函数(plt 接口)
| 函数名 |
功能描述 |
示例代码 |
plt.plot(x,y) |
绘制折线图(快速接口) |
plt.plot(x, np.sin(x), 'r--', label='sin(x)') |
plt.hist(x) |
绘制直方图 |
plt.hist(data, bins=30, alpha=0.7, color='skyblue') |
plt.boxplot(x) |
绘制箱线图 |
plt.boxplot([group1, group2], labels=['A', 'B']) |
plt.pie(x) |
绘制饼图 |
plt.pie(values, labels=['A', 'B', 'C'], autopct='%1.1f%%') |
plt.scatter(x,y) |
绘制散点图 |
plt.scatter(x, y, c=z, cmap='viridis', s=30) |
plt.xlabel() |
设置X轴标签(快速接口) |
plt.xlabel('时间', fontsize=12) |
plt.title() |
设置子图标题(快速接口) |
plt.title('数据分布', fontsize=14, pad=15) |
plt.legend() |
显示图例(快速接口) |
plt.legend(loc='best', fontsize=10) |
plt.show() |
显示图像窗口 |
plt.show() |
plt.tight_layout() |
自动调整布局(避免标签截断) |
plt.tight_layout() |
三、图表美化常用配置
1. 全局配置(plt.rcParams)
# 中文显示(Windows/Linux/Mac通用)
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # Mac
# plt.rcParams['font.sans-serif'] = ['DejaVu Sans'] # Linux
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
# 全局字体大小
plt.rcParams['font.size'] = 10
# 图表边框样式
plt.rcParams['axes.linewidth'] = 1.2
# 图例样式
plt.rcParams['legend.frameon'] = True # 显示图例边框
2. 颜色与线型速查
| 颜色缩写 |
对应颜色 |
线型缩写 |
对应线型 |
'r' |
红色 |
'-' |
实线 |
'g' |
绿色 |
'--' |
虚线 |
'b' |
蓝色 |
':' |
点线 |
'k' |
黑色 |
'-.' |
点划线 |
'w' |
白色 |
|
|
'y' |
黄色 |
|
|
四、数据格式适配(NumPy/Pandas)
| 数据类型 |
适配方法 |
示例代码 |
| NumPy 数组 |
直接传入函数 |
x = np.linspace(0, 10, 100) → plt.plot(x, np.cos(x)) |
| Pandas Series |
直接传入(自动识别索引) |
s = pd.Series(np.random.randn(100)) → ax.plot(s) |
| Pandas DataFrame |
指定列名(Seaborn 更友好) |
df = pd.DataFrame({'x': x, 'y': np.sin(x)}) → sns.lineplot(data=df, x='x', y='y') |
五、保存与显示最佳实践
1. 保存图片注意事项
# 正确顺序:先保存再显示(避免空白图片)
fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('result.png', dpi=150, bbox_inches='tight', facecolor='white')
plt.show()
# 支持格式:PNG/JPG/SVG/PDF(SVG/PDF为矢量图,放大不失真)
fig.savefig('result.svg') # 矢量图,适合论文/报告
2. 多子图布局示例
# 2行2列子图,共享X轴
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True, figsize=(10, 6))
ax1.plot(x, np.sin(x))
ax2.plot(x, np.cos(x))
ax3.plot(x, np.tan(x))
ax4.plot(x, np.exp(-x))
fig.suptitle('多子图示例', fontsize=16)
plt.tight_layout()
六、常见问题速查
| 问题现象 |
解决方案 |
| 中文显示乱码 |
配置 plt.rcParams['font.sans-serif'] 和 axes.unicode_minus |
| 标签被截断 |
调用 plt.tight_layout() 或 fig.tight_layout() |
| 保存图片空白 |
先 fig.savefig() 再 plt.show()(plt.show() 会清空画布) |
| 多子图绘制错乱 |
优先使用 Axes 接口(ax1.plot()/ax2.plot()),避免 plt 接口混用 |
| 颜色/线型不生效 |
检查参数名是否正确(如 linewidth 而非 line_width) |