Python+Matplotlib图像上指定坐标的位置添加文本标签与注释


Posted in Python onApril 11, 2022

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

用于在绘图过程中,在图像上指定坐标的位置添加文本。需要用到的是plt.text()方法。 

其主要的参数有三个:

plt.text(x, y, s)

其中x,y表示传入点的x和y轴坐标。s表示字符串。

需要注意的是,这里的坐标,如果设定有xticks、yticks标签,则指的不是标签,而是绘图时x、轴的原始值。

因为参数过多,不再一一解释,根据代码学习其用法。

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()

Python+Matplotlib图像上指定坐标的位置添加文本标签与注释

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时,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()

Python+Matplotlib图像上指定坐标的位置添加文本标签与注释

下边换一种效果呈现,将提示语“股市有风险,入市需谨慎”字体调大到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 相关文章推荐
python显示生日是星期几的方法
May 27 Python
Python中的变量和作用域详解
Jul 13 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
基于python的七种经典排序算法(推荐)
Dec 08 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
QML使用Python的函数过程解析
Sep 26 Python
Django框架创建项目的方法入门教程
Nov 04 Python
python中的RSA加密与解密实例解析
Nov 18 Python
如何基于python操作excel并获取内容
Dec 24 Python
pytorch 查看cuda 版本方式
Jun 23 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
浅析Python OpenCV三种滤镜效果
实战Python爬虫爬取酷我音乐
用PYTHON去计算88键钢琴的琴键频率和音高
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
You might like
PHP脚本的10个技巧(4)
2006/10/09 PHP
php的正则处理函数总结分析
2008/06/20 PHP
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
PHP多维数组排序array详解
2017/11/21 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
讲解Python中运算符使用时的优先级
2015/05/14 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
Python操作MongoDB详解及实例
2017/05/18 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
用Python解决x的n次方问题
2019/02/08 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
介绍一下gcc特性
2012/01/20 面试题
求职简历自荐信
2013/10/20 职场文书
市场营销专业毕业生自荐信
2013/11/02 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
大学生军训感言
2015/08/01 职场文书
送给客户微信问候语!
2019/07/04 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android