Matplotlib 轴标签和标题

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=20plt.tight_layout()
多子图标题重叠使用 suptitle + tight_layout(rect=...)
字体不统一使用 fontdictrcParams

官方文档

  • 文本 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 可用中英文字体方案
  • 制作 论文级图表模板(带标题规范)

告诉我你的需求!

文章已创建 2481

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部