pin_drop当前位置:知识文库 ❯ 图文

matplotlib标题与标签设置详解 - Python图表文本自定义

概述

标题和标签是图表的重要组成部分,为读者提供图表主题和坐标轴含义的说明。matplotlib提供了set_title()set_xlabel()set_ylabel()等函数来设置这些文本元素,支持字体大小、颜色、位置、数学公式等丰富的自定义选项。

好的标题和标签设置能够让图表在学术论文、商业报告和演示文稿中脱颖而出。它们不仅是装饰,更是图表传达信息的关键通道,帮助读者快速理解图表的核心内容。


语法与参数说明

基本语法

代码示例

ax.set_title(label, fontsize=12, **kwargs)
ax.set_xlabel(xlabel, fontsize=12, **kwargs)
ax.set_ylabel(ylabel, fontsize=12, **kwargs)
fig.suptitle(title, fontsize=14, **kwargs)

通用文本参数

参数 类型 默认值 说明
fontsize/size int/str 12 字体大小
fontweight/weight str/int 'normal' 字体粗细:'bold'/'light'/数字
fontstyle/style str 'normal' 字体样式:'normal'/'italic'/'oblique'
color str 'black' 字体颜色
fontfamily/family str 'sans-serif' 字体族:'serif'/'sans-serif'/'monospace'
alpha float 1 透明度
rotation float 0 旋转角度
ha str 'center' 水平对齐
va str 'center' 垂直对齐

set_title特有参数

参数 类型 默认值 说明
loc str 'center' 位置:'left'/'center'/'right'
pad float 6.0 与图的间距

返回值

返回Text对象,可用于后续修改,如title.set_color('red')


代码示例

示例1:基本标题与标签

为图表设置基本的标题和坐标轴标签,这是最常见的用法。

代码示例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

fig, ax = plt.subplots(figsize=(8, 5))
ax.plot(x, np.sin(x), 'b-', linewidth=2)

# 设置标题和标签
ax.set_title('Sine Function')
ax.set_xlabel('x (radians)')
ax.set_ylabel('y = sin(x)')

plt.savefig('basic_labels.png', dpi=100, bbox_inches='tight')
print("基本标题标签已保存")

输出:

代码示例

基本标题标签已保存

示例2:样式自定义与数学公式

演示自定义标题样式和使用LaTeX语法渲染数学公式,适合学术论文场景。

代码示例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 100)

fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, np.exp(-x**2), 'b-', linewidth=2)

# 自定义标题样式
ax.set_title('Gaussian Distribution',
             fontsize=16, fontweight='bold', color='#333333',
             loc='left', pad=15)

# 数学公式标签(LaTeX语法)
ax.set_xlabel(r'$x$', fontsize=14)
ax.set_ylabel(r'$f(x) = e^{-x^2}$', fontsize=14, color='blue')

# 副标题
ax.text(0.5, 0.92, r'$\mu=0, \sigma=1$',
        transform=ax.transAxes, ha='center', fontsize=12,
        style='italic', color='gray')

ax.grid(True, alpha=0.3)
plt.savefig('styled_labels.png', dpi=100, bbox_inches='tight')
print("样式标签已保存")

输出:

代码示例

样式标签已保存

示例3:子图标题与总标题

在多子图布局中,为每个子图设置独立标题,并为整个Figure添加总标题。

代码示例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

fig, axes = plt.subplots(2, 2, figsize=(12, 8))

# 各子图标题
axes[0, 0].plot(x, np.sin(x), 'b-')
axes[0, 0].set_title('sin(x)', fontsize=12, fontweight='bold')

axes[0, 1].plot(x, np.cos(x), 'r-')
axes[0, 1].set_title('cos(x)', fontsize=12, fontweight='bold')

axes[1, 0].plot(x, np.tan(x), 'g-')
axes[1, 0].set_title('tan(x)', fontsize=12, fontweight='bold')
axes[1, 0].set_ylim(-5, 5)

axes[1, 1].plot(x, np.sin(x) + np.cos(x), 'm-')
axes[1, 1].set_title('sin(x) + cos(x)', fontsize=12, fontweight='bold')

# 共享坐标轴标签
for ax in axes[1]:
    ax.set_xlabel('x (radians)', fontsize=11)
for ax in axes[:, 0]:
    ax.set_ylabel('y', fontsize=11)

# 总标题
fig.suptitle('Trigonometric Functions Overview',
             fontsize=16, fontweight='bold', color='#2196F3', y=0.98)

plt.tight_layout(rect=[0, 0, 1, 0.95])
plt.savefig('subplot_titles.png', dpi=100, bbox_inches='tight')
print("子图标题已保存")

输出:

代码示例

子图标题已保存

实际应用场景

  • 学术论文:使用LaTeX数学公式作为坐标轴标签,符合学术出版规范

  • 报告展示:使用suptitle为整个图表组添加总标题,增强整体感

  • 演示文稿:使用大号加粗标题增强视觉冲击力,吸引观众注意力


注意事项

注意:LaTeX公式需使用原始字符串r'$...$',避免转义字符冲突

注意:suptitle()添加的总标题可能被子图遮挡,需调整tight_layout的rect参数或使用y参数上移

注意:xlabel/ylabel的标签文字过长时,可使用rotation旋转或换行(\n)避免重叠


文本函数对比

函数 位置 用途
set_title() 子图顶部 子图标题
suptitle() Figure顶部 总标题
set_xlabel() X轴下方 X轴标签
set_ylabel() Y轴左侧 Y轴标签
text() 任意位置 自由文本
annotate() 任意位置+箭头 带箭头注释

小结

  • set_title()设置子图标题,suptitle()设置Figure总标题

  • set_xlabel/set_ylabel设置坐标轴标签,支持LaTeX数学公式

  • fontsize控制大小,fontweight控制粗细,color控制颜色

  • 多子图共享标签时,只为边缘子图设置,避免重复


练习题

练习1

绘制y=x^2曲线,设置标题为"Quadratic Function",X轴标签为"x",Y轴标签为"y = x^2"

练习2

绘制正态分布曲线,使用LaTeX公式作为标题和坐标轴标签

练习3

创建2x2子图,为每个子图设置不同样式的标题,并添加总标题

常见问题

如何在标题中使用中文?

matplotlib默认不支持中文,需要设置字体。可以使用plt.rcParams['font.sans-serif'] = ['SimHei']设置黑体,或使用fontfamily参数指定中文字体。Windows系统常用'SimHei'或'Microsoft YaHei',macOS常用'Arial Unicode MS'。

suptitle和set_title有什么区别?应该用哪个?

suptitle()作用于整个Figure,适合为多子图添加总标题;set_title()作用于单个Axes(子图)。如果只有一个子图,用set_title()即可;如果有多个子图且需要总标题,可以同时使用两者。

如何使用LaTeX语法渲染数学公式?

在文本中使用r'$...$'包裹LaTeX表达式,如r'$y = \alpha x^2 + \beta x + \gamma$'。注意使用原始字符串r''避免转义问题。如果需要完整LaTeX渲染,可以设置text.usetex=True,但这需要系统安装LaTeX。

如何调整标题与图表之间的距离?

set_title()使用pad参数调整间距(默认6.0),如set_title('Title', pad=20)增大间距。suptitle()使用y参数控制垂直位置(默认约0.98),y值越大越靠近顶部。也可以使用plt.title()的y参数直接设置绝对位置。

如何在图表中添加带箭头的注释?

使用ax.annotate()函数,基本语法为ax.annotate('注释文本', xy=(箭头位置x, y), xytext=(文本位置x, y), arrowprops=dict(arrowstyle='->'))。支持自定义箭头样式、颜色、曲率等。

标签: matplotlib 标题 坐标轴标签 LaTeX公式 Python教程 数据可视化

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: matplotlib图例legend()函数详解 - Python图表图例设置教程 下一篇: matplotlib坐标轴设置详解 - Python图表刻度范围对数轴教程

poll相关推荐