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执行外部程序的常用方法小结
Mar 21 Python
Python中__init__.py文件的作用详解
Sep 18 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
实例介绍Python中整型
Feb 11 Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
python lambda的使用详解
Feb 26 Python
Python&Matlab实现樱花的绘制
Apr 07 Python
浅析Python OpenCV三种滤镜效果
实战Python爬虫爬取酷我音乐
用PYTHON去计算88键钢琴的琴键频率和音高
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
You might like
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
JavaScript的Function详细
2006/11/14 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
js实现指定时间倒计时效果
2019/08/26 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
深入理解python中的闭包和装饰器
2016/06/12 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
Python中psutil的介绍与用法
2019/05/02 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
详解python如何引用包package
2020/06/07 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
运动会跳远广播稿
2014/02/04 职场文书
入党综合考察材料
2014/06/02 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
家长对孩子的寄语
2015/02/26 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android