Python Matplotlib添加文本标签与注释详解

Miles
Miles
发布时间:2026-10-16| 5人浏览过
原创

本文详细介绍如何在Python中使用Matplotlib库为图像添加文本标签和注释。通过plt.text()方法实现指定坐标的文本标注,支持字体、颜色、旋转等样式设置;利用plt.annotate()方法添加带箭头的解释性注释,详解坐标系统、箭头属性及收缩参数配置,结合股票收盘价示例代码,帮助开发者掌握图表标注技巧。

1.添加文本标签 plt.text()

该方法用于在绘图过程中,于图像指定坐标位置添加文本内容,主要依赖plt.text()方法实现。

其核心参数包括以下三项:

plt.text(x, y, s)

其中x和y分别代表传入点的横轴与纵轴坐标,s为待显示的字符串内容。

需注意,若绘图时设置了xticks或yticks标签,此处的坐标仍指绘图时的原始数值,而非标签文本。

因参数众多,此处不再逐一列举,建议结合代码示例学习具体用法。

ha='center'设定垂直对齐方式为居中,fontsize=30指定字体大小为30,rotation=-25表示旋转角度为-25度,c参数用于设定颜色,alpha参数控制透明度。

va参数用于设定水平对齐方式。

以下代码在图像中添加了两个文本元素:一个是透明度为0.4的斜体水印“股市有风险,投资需谨慎”。

另一个是在折线图的每个数据点附近标注当天的收盘价。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = range(9)
y = [5.12, 5.15, 5.13, 5.10, 5.2, 5.25, 5.19, 5.24, 5.31]
c = 0.5 * (min(x) + max(x))
d = min(y) + 0.3 * (max(y)-min(y))
# 水印效果
plt.text(c, d, '股市有风险,入市需谨慎', ha='center', fontsize=30, rotation=-25, c='gray', alpha=0.4)

plt.plot(x, y, label='股票A收盘价', c='r', ls='-.', marker='D', lw=2)
plt.xticks(x, [
	'2022-03-27', '2022-03-28', '2022-03-29', '2022-03-30',
	'2022-03-31', '2022-04-01', '2022-04-04', '2022-04-05',
	'2022-04-06'], rotation=45)
plt.title('某股票收盘价时序图')
plt.xlabel('日期')
plt.ylabel('价格')
plt.grid(True)
plt.legend()

# 标出每天的收盘价
for a, b in zip(x, y):
	plt.text(a, b+0.01, '%.1f'%b, ha='center', va='bottom', fontsize=9)
plt.show()

2. 添加注释 plt.annotate()

基于前述代码,进一步添加注释功能。注释用于解释图像中的特定位置,通常通过箭头指向目标区域。

实现注释功能需使用plt.annotate()方法。

该方法语法中常用的参数如下所示:

plt.annotate(str,xy,xytext,xycoords,arrowcoords)

其中str为注释所需的字符串,即注释文本内容。

xy参数指定被注释点的坐标位置。

xytext参数指定注释文本显示的位置。

xycoords参数定义被注释点坐标系的属性,即描述该点坐标的方式。默认值为"data",表示使用(x,y)坐标描述。其他可选值包括:figure表示以整个画布为参考系,axes表示仅针对特定axes对象区域。

设置值描述
data默认值,表示被注释点的(x,y)坐标
figure points以绘图区的左下角为坐标原点,单位是点数
figure pixels以绘图区的左下角为坐标原点,单位是像素数
figure fraction以绘图区的左下角为坐标原点,单位是百分比
axes points以绘图区的左下角为坐标原点,单位是点数
axes pixels以绘图区的左下角为坐标原点,单位是像素数
axes fraction以绘图区的左下角为坐标原点,单位是百分比
polar不使用本地数据坐标系,使用极坐标描述

arrowprops为字典类型,用于设置箭头属性。字典外的参数均表示注释文本的属性。

字典内可设置的参数包括:

设置值描述
width箭头的宽度(非头部)
headwidth箭头头部的宽度
headlength箭头头部的长度
facecolor箭头的颜色
shrink箭头两端收缩的百分比(占总长)
?任何matplotlib.patches.FancyArrowPacth中的关键字

关于这些参数的进一步说明:箭头总长度由被注释点与注释文本位置坐标决定,可通过调节arrowprops中的shrink键进一步控制长度。shrink表示将箭头缩短的长度占总长度的百分比。若不设定shrink,默认值为0,即不缩短。当shrink值很大且接近1时,效果等同于不缩短。

以标注图中最低价格点为例,在目标位置添加红色箭头及“最低价”文字说明。

其他更多参数,如设置注释文本字体的c或color表示颜色,fontsize表示字体大小。更多属性可自行探索尝试。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = range(9)
y = [5.12, 5.15, 5.13, 5.10, 5.2, 5.25, 5.19, 5.24, 5.31]
c = 0.5 * (min(x) + max(x))
d = min(y) + 0.3 * (max(y)-min(y))
# 仿水印效果
plt.text(c, d, '股市有风险,入市须谨慎', ha='center', fontsize=30, rotation=-25, c='gray', alpha=0.4)
plt.plot(x, y, label='股票A收盘价', c='r', ls='-.', marker='D', lw=2)
# plt.plot([5.09, 5.13, 5.16, 5.12, 5.09, 5.25, 5.16, 5.20, 5.25], label='股票B收盘价', c='g', ls=':', marker='H', lw=4)
plt.xticks(x, [
    '2022-03-27', '2022-03-28', '2022-03-29', '2022-03-30',
    '2022-03-31', '2022-04-01', '2022-04-04', '2022-04-05',
    '2022-04-06'], rotation=45)
plt.title('某股票收盘价时序图')
plt.xlabel('日期')
plt.ylabel('价格')
plt.grid(True)
plt.legend()

# 标出每天的收盘价
for a, b in zip(x, y):
    plt.text(a, b+0.01, '%.1f'%b, ha='center', va='bottom', fontsize=9)

# 添加注释
plt.annotate('最低价', (x[y.index(min(y))],min(y)), (x[y.index(min(y))] + 0.5, min(y)), xycoords='data',
             arrowprops=dict(facecolor='r', shrink=0.1), c='r',fontsize=15)
plt.show()

以下代码展示另一种效果:将提示语“股市有风险,入市须谨慎”字体放大至50且不透明。添加的注释箭头宽度为3,头部宽度为10,长度为20,缩短比例为0.05,箭头颜色为绿色,注释字体为红色。代码示例如下:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = range(9)
y = [5.12, 5.15, 5.13, 5.10, 5.2, 5.25, 5.19, 5.24, 5.31]
c = 0.5 * (min(x) + max(x))
d = min(y) + 0.3 * (max(y)-min(y))
plt.plot(x, y, label='股票A收盘价', c='k', ls='-.', marker='D', lw=2)
plt.xticks(x, [
    '2022-03-27', '2022-03-28', '2022-03-29', '2022-03-30',
    '2022-03-31', '2022-04-01', '2022-04-04', '2022-04-05',
    '2022-04-06'], rotation=45)
plt.title('某股票收盘价时序图')
plt.xlabel('日期')
plt.ylabel('价格')
plt.grid(True)
plt.legend()

# 标出每天的收盘价
for a, b in zip(x, y):
    plt.text(a, b+0.01, '%.1f'%b, ha='center', va='bottom', fontsize=9)

plt.text(c, d, '股市有风险,入市须谨慎', ha='center', fontsize=50, rotation=-25, c='r')
plt.annotate('最低价', (x[y.index(min(y))], min(y)), (x[y.index(min(y))] + 2, min(y)), xycoords='data',
             arrowprops=dict(width=3,headwidth=10,headlength=20, facecolor='g',shrink=0.05), c='r',fontsize=20)
plt.show()

到此这篇关于Python+Matplotlib实现给图像添加文本标签与注释的文章就介绍到这了,更多相关Python Matplotlib图像添加标签内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。