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 判断一个进程是否存在
Apr 09 Python
在Linux中通过Python脚本访问mdb数据库的方法
May 06 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Python如何生成树形图案
Jan 03 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
Python3爬虫全国地址信息
Jan 05 Python
Django在Model保存前记录日志实例
May 14 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
python 基于opencv操作摄像头
Dec 24 Python
浅析Python OpenCV三种滤镜效果
实战Python爬虫爬取酷我音乐
用PYTHON去计算88键钢琴的琴键频率和音高
python图像处理 PIL Image操作实例
Apr 09 #Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
You might like
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
获取中文字符串的实际长度代码
2014/06/05 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
vue3.0 上手体验
2020/09/21 Javascript
实现vuex原理的示例
2020/10/21 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
Tensorflow 实现释放内存
2020/02/03 Python
python实现低通滤波器代码
2020/02/26 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
三月学雷锋活动总结
2014/06/26 职场文书
刑事案件上诉状
2015/05/23 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android