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 相关文章推荐
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
Python unittest模块用法实例分析
May 25 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python3.6编写的单元测试示例
Aug 17 Python
Python面向对象之Web静态服务器
Sep 03 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
基于plt.title无法显示中文的快速解决
May 16 Python
python的json包位置及用法总结
Jun 21 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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
ThinkPHP采用模块和操作分析
2011/04/18 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
javascript分页代码(当前页码居中)
2012/09/20 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python之信息加密题目详解
2019/06/26 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
数控技术专业毕业自荐书范文
2014/02/05 职场文书
公司会议开幕词
2015/01/29 职场文书
新店开张宣传语
2015/07/13 职场文书
MySQL基础(一)
2021/04/05 MySQL
Python 语言实现六大查找算法
2021/06/30 Python