Matplotlib 核心类与常用函数使用说明

Matplotlib 核心类与常用函数使用说明(精准聚焦高频场景)

以下按「核心类 → 常用函数 → 实战示例」结构,聚焦实际开发中80%场景用到的功能,明确类与函数的调用关系、参数含义,避开冗余细节:

一、核心类(基础骨架,必须掌握)

1. Figure 类(画布)

  • 作用:顶层容器,承载所有绘图元素(Axes、标题、图例等),控制画布大小、分辨率等全局属性。
  • 创建方式
    import matplotlib.pyplot as plt
    fig = plt.figure(figsize=(8, 4), dpi=100, facecolor='white')  # 最常用
    
  • 关键参数
    • figsize=(宽, 高):单位英寸(默认(6.4, 4.8)),最终像素=figsize×dpi;
    • dpi:分辨率(默认100),值越高图片越清晰;
    • facecolor:画布背景色(默认白色,可用十六进制如#f0f0f0)。
  • 常用方法
    • fig.add_subplot(nrows, ncols, index):添加单个子图(Axes),如fig.add_subplot(2,2,1)=2行2列第1个子图;
    • fig.subplots(nrows, ncols):批量创建子图,返回(fig, (ax1, ax2...)),更高效;
    • fig.savefig('path.png', dpi=150, bbox_inches='tight'):保存图片(bbox_inches裁剪空白边距);
    • fig.suptitle('全局标题', fontsize=16):添加画布级全局标题(区别于Axes的子图标题)。

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(柱宽)、coloredgecolor(边框色)
    坐标轴设置 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() fontsizepad(与图表间距)
    ax.legend() loc(位置,如'best'/'upper right')、fontsize
    网格与背景 ax.grid(True) alpha(透明度)、linestyle(线型,如'--'
    ax.set_facecolor('#f8f8f8') 设置子图背景色

3. Axis 类(单个坐标轴)

  • 作用:控制x轴/ y轴的刻度、标签、样式(是Axes的子组件)。
  • 获取方式:通过Axes对象访问,如ax.xaxis(x轴)、ax.yaxis(y轴)。
  • 常用方法
    ax.xaxis.set_tick_params(labelsize=10, rotation=45)  # 刻度标签大小+旋转45度
    ax.xaxis.set_label_text('X轴名称', fontsize=12)  # 等价于ax.set_xlabel()
    ax.xaxis.set_major_locator(plt.MultipleLocator(1))  # 主刻度每1个单位显示1个
    

二、常用辅助函数(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()

五、使用原则总结

  1. 先创建 FigureAxes,再调用 ax.xxx 绘图(复杂场景优先);
  2. 相同功能优先用 Axes 接口(如ax.set_xlabel()),比 plt 接口更精准;
  3. 参数遵循“通用规则”(颜色、线型、透明度等参数格式一致),无需死记硬背;
  4. 保存图片时,先 fig.savefig()plt.show(),避免保存空白。

Matplotlib 核心类与函数速查表

目录

  1. 核心类(Figure/Axes/Axis)
  2. 常用绘图函数
  3. 图表美化函数
  4. 数据格式适配
  5. 保存与显示函数
  6. 常见问题速查

一、核心类(基础骨架)

1. Figure 类(画布)

功能 代码示例 关键参数说明
创建画布 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

posted @ 2025-11-25 13:45  wangya216  阅读(128)  评论(0)    收藏  举报