Matplotlib 轴标签与标题(完整专业指南)
掌握 轴标签(xlabel/ylabel) 和 标题(title) 的设置,是让图表从「可读」到「专业发表级」的关键一步。本教程带你全面掌握 文字内容、字体、位置、样式、数学公式、中文支持、多图协调 等全部技巧。
一、基本语法
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('X 轴标签') # X轴标签
plt.ylabel('Y 轴标签') # Y轴标签
plt.title('图表标题') # 主标题
plt.show()
二、核心函数详解
| 函数 | 作用 | 常用参数 |
|---|---|---|
plt.xlabel() | X轴标签 | label, fontsize, fontweight, color, rotation, loc |
plt.ylabel() | Y轴标签 | 同上 |
plt.title() | 主标题 | label, fontsize, loc, pad, fontdict |
ax.set_xlabel() | 面向对象方式 | 更灵活,推荐复杂图 |
三、字体设置(fontsize, fontweight, color)
plt.xlabel('时间 (s)', fontsize=14, fontweight='bold', color='darkblue')
plt.ylabel('振幅', fontsize=12, color='darkgreen')
plt.title('正弦波', fontsize=16, fontweight='bold', color='black')
推荐字体大小:
- 标题:
14~18- 轴标签:
12~14- 刻度标签:
10~12
四、位置控制(loc)
1. title 位置
plt.title('左对齐标题', loc='left')
plt.title('居中标题', loc='center') # 默认
plt.title('右对齐标题', loc='right')
2. xlabel / ylabel 位置(ax.set_ 推荐)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('X 轴', loc='left') # left, center, right
ax.set_ylabel('Y 轴', loc='bottom') # bottom, center, top
五、标题间距(pad)
plt.title('带间距的标题', pad=20) # 单位:点,增大与图的距离
六、数学公式(LaTeX 渲染)
plt.xlabel(r'时间 $t$ (s)') # 普通变量
plt.ylabel(r'位移 $x(t) = A \sin(\omega t)$') # 复杂公式
plt.title(r'$\sin^2(\theta) + \cos^2(\theta) = 1$')
启用 LaTeX(默认开启):
plt.rcParams['text.usetex'] = False # True 使用系统 LaTeX(需安装)
常用符号:
| 符号 | 代码 |
|---|---|
| α | $\alpha$ |
| π | $\pi$ |
| ∞ | $\infty$ |
| ∑ | $\sum$ |
| ∫ | $\int$ |
| ≥ | $\geq$ |
| ° | $^\circ$ |
七、中文支持(解决乱码)
方法1:设置中文字体(推荐)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False # 负号正常显示
plt.xlabel('时间(秒)')
plt.ylabel('温度(℃)')
plt.title('温度变化曲线')
方法2:字体文件指定(精确控制)
from matplotlib import font_manager
font = font_manager.FontProperties(fname='C:/Windows/Fonts/simhei.ttf', size=14)
plt.xlabel('时间', fontproperties=font)
八、面向对象方式(推荐用于多子图)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.plot(x, np.sin(x))
ax1.set_xlabel('X')
ax1.set_ylabel('sin(x)')
ax1.set_title('正弦')
ax2.plot(x, np.cos(x))
ax2.set_xlabel('X')
ax2.set_ylabel('cos(x)')
ax2.set_title('余弦')
plt.suptitle('三角函数对比', fontsize=16, y=1.05) # 总标题
plt.tight_layout()
plt.show()
plt.suptitle():设置整个 Figure 的总标题
九、样式字典统一管理(fontdict)
title_font = {'fontsize': 16, 'fontweight': 'bold', 'color': 'darkred'}
label_font = {'fontsize': 12, 'color': 'navy'}
plt.title('统一样式标题', fontdict=title_font)
plt.xlabel('X 轴', fontdict=label_font)
plt.ylabel('Y 轴', fontdict=label_font)
十、旋转与对齐
plt.xlabel('很长的标签需要旋转', rotation=30, ha='right', va='bottom')
# ha: 水平对齐 (left, center, right)
# va: 垂直对齐 (top, center, bottom, baseline)
十一、完整专业示例
import matplotlib.pyplot as plt
import numpy as np
# 样式配置
plt.style.use('seaborn-v0_8')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(0, 2*np.pi, 100)
y1, y2 = np.sin(x), np.cos(x)
fig, ax = plt.subplots(figsize=(10, 6))
# 绘图
ax.plot(x, y1, 'b-', linewidth=2, label=r'$\sin(x)$')
ax.plot(x, y2, 'r--', linewidth=2, label=r'$\cos(x)$')
# 轴标签
ax.set_xlabel('角度 $x$ (rad)', fontsize=14, fontweight='bold', color='darkblue', loc='right')
ax.set_ylabel('函数值', fontsize=14, fontweight='bold', color='darkgreen', loc='top')
# 标题
ax.set_title('三角函数对比分析', fontsize=18, fontweight='bold', color='black', pad=20, loc='left')
# 图例
ax.legend(loc='upper right', fontsize=12, frameon=True, fancybox=True, shadow=True)
# 网格与边框
ax.grid(True, alpha=0.3, linestyle='--')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# 总标题
fig.suptitle('Matplotlib 标题与标签专业示例', fontsize=16, y=0.98)
plt.tight_layout(rect=[0, 0, 1, 0.95])
plt.savefig('pro_labels.png', dpi=300, bbox_inches='tight')
plt.show()
十二、速查表(收藏用)
# 标题
plt.title('标题', fontsize=16, fontweight='bold', color='k', loc='center', pad=15)
# 轴标签
plt.xlabel('X', fontsize=14, color='navy', rotation=0, ha='center', va='bottom')
plt.ylabel('Y', fontsize=14, color='darkgreen', rotation=90, ha='right', va='center')
# 数学公式
r'$\alpha^2 + \beta^2 = \gamma^2$'
# 中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
十三、常见问题解决
| 问题 | 解决方案 |
|---|---|
| 中文乱码 | 设置 font.sans-serif + unicode_minus=False |
| 负号显示方框 | 同上 |
| 标题太靠近图 | pad=20 或 plt.tight_layout() |
| 多子图标题重叠 | 使用 suptitle + tight_layout(rect=...) |
| 字体不统一 | 使用 fontdict 或 rcParams |
官方文档
- 文本 API:https://matplotlib.org/stable/api/text_api.html
- 标题示例:https://matplotlib.org/stable/gallery/text_labels_and_annotations/titles_demo.html
总结:专业三步法
# 1. 内容清晰(带单位、公式)
plt.xlabel('时间 $t$ (s)')
# 2. 字体协调(大小、粗细、颜色)
plt.title('实验结果', fontsize=16, fontweight='bold')
# 3. 位置优化(loc, pad, tight_layout)
plt.title('...', pad=20, loc='left')
一键生成专业标题:
plt.title('温度变化曲线', fontsize=16, fontweight='bold', color='darkred', pad=15)
plt.xlabel('时间 (h)', fontsize=14)
plt.ylabel('温度 (°C)', fontsize=14)
需要我为你:
- 生成 可自定义的标题配置工具?
- 输出 LaTeX/PPT 可用中英文字体方案?
- 制作 论文级图表模板(带标题规范)?
告诉我你的需求!