Python+Matplotlib实现给图像添加文本标签与注释

目录
  • 1.添加文本标签 plt.text()
  • 2. 添加注释 plt.annotate()

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

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

下边换一种效果呈现,将提示语“股市有风险,入市需谨慎”字体调大到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图像添加标签内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python调用Matplotlib绘制分布点并且添加标签

    本文实例为大家分享了Python调用Matplotlib绘制分布点添加标签的具体代码,供大家参考,具体内容如下 添加标签的目的 代码 截图 目的 上文介绍了根据图像的大小作为坐标来绘制分布点图.老大又给了我一个任务,我绘制完,每次将图保存,发给她,但是图片中的点的坐标是不能显示了,所以她让我给每个点添加个label,而且label是该点的横纵坐标. 代码 import matplotlib.pyplot as plt from numpy.random import rand import nu

  • python matplotlib如何给图中的点加标签

    这篇文章主要介绍了python matplotlib给图中的点加标签,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在写论文用到matplotlib画散点图,想着如果能把每个点对应的ID打在点的旁边就好了,经过一番搜索,最后找到了方法. 首先是打点,先把所有的点画好,举例如下: p1 = ax.scatter(X[:,0], X[:,1], marker = '*', color = 'r', label='1', s=10) 再依次给每个点打

  • python matplotlib画盒图、子图解决坐标轴标签重叠的问题

    在使用matplotlib画图的时候将常会出现坐标轴的标签太长而出现重叠的现象,本文主要通过自身测过好用的解决办法进行展示,希望也能帮到大家,原图出现重叠现象例如图1: 代码为: data1=[[0.3765,0.3765,0.3765,0.3765,0.3765],[0.3765,0.3765,0.3765,0.3765,0.3765],[0.3765,0.3765,0.3765,0.3765,0.3765],[0.3765,0.3765,0.3765,0.3765,0.3765]] data

  • Python使用matplotlib给柱状图添加数据标签bar_label()

    目录 0.更新matplotlib库 1.导入库 2.数据准备 3.绘制柱状图 4.绘图结果 5.完整代码 6.bar_label()相关参数的补充说明 0.更新matplotlib库 本文后续的实验过程都是基于matplotlib版本大于等于3.4.1,如果版本较低,是无法实行后续操作的,如何在Pycharm中直接更新matplotlib库的版本,请参照方法:以tensorflow库为例用Pycharm更新第三方库 1.导入库 直接导入matplotlib.pyplot库,代码为: impor

  • Python+Matplotlib实现给图像添加文本标签与注释

    目录 1.添加文本标签 plt.text() 2. 添加注释 plt.annotate() 1.添加文本标签 plt.text() 用于在绘图过程中,在图像上指定坐标的位置添加文本.需要用到的是plt.text()方法.  其主要的参数有三个: plt.text(x, y, s) 其中x,y表示传入点的x和y轴坐标.s表示字符串. 需要注意的是,这里的坐标,如果设定有xticks.yticks标签,则指的不是标签,而是绘图时x.轴的原始值. 因为参数过多,不再一一解释,根据代码学习其用法. ha

  • 如何利用python正确地为图像添加高斯噪声

    目录 彩图or灰度图 uint8orfloat64 方差or标准差 是否截断(clip) 总结 参考 开门见山,直接使用 skimage 库为图像添加高斯噪声是很简单的: import skimage origin = skimage.io.imread("./lena.png") noisy = skimage.util.random_noise(origin, mode='gaussian', var=0.01) 但是如果不用库函数而自己实现的话,有几个问题是值得注意的. 彩图 o

  • python/Matplotlib绘制复变函数图像教程

    今天发现sympy依赖的库mpmath里也有很多数学函数,其中也有在复平面绘制二维图的函数cplot,具体例子如下 from mpmath import * def f1(z): return z def f2(z): return z**3 def f3(z): return (z**4-1)**(1/4) def f4(z): return 1/z def f5(z): return atan(z) def f6(z): return sqrt(z) cplot(f1) cplot(f2)

  • python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)

    目录 1.高斯噪声 2.椒盐噪声 3.泊松噪声 4.speckle噪声 导读: 这篇文章主要介绍如何利用opencv来对图像添加各类噪声,原图: 1.高斯噪声 高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调节高斯分布标准差(sigma)的大小来控制添加噪声程度,sigma越大添加的噪声越多图片损坏的越厉害 #读取图片 img = cv2.imread("demo.png") #设置高斯分布的均值和方差 mean = 0 #设置高斯分布的标准差 sigma = 25 #根据均值

  • Python+Matplotlib绘制3D图像的示例详解

    目录 1. 绘制3D柱状图 2. 绘制3D曲面图 示例1 示例2 3.绘制3D散点图 4. 绘制3D曲线图 1. 绘制3D柱状图 绘制3D柱状图使用的是axes3d.bar()方法. 可能跟我们中学学的有一点不同的是,其语法如下: bar(left, height, zs=0, zdir=‘z’, *args, **kwargs) 其中left表示指向侧边的轴,zs表示指向我们的方向的轴,height即表示高度的轴.这三者都需要是一维的序列对象.在调用相关方法的时候,比如设置轴标签,还有一点需要

  • Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)

    Python的matplotlib模块绘制图形功能很强大,今天就用pyplot绘制一个简单的图形,图形中包括曲线.曲线上的点.注释和指向点的箭头. 1. 结果预览: 2. 代码如下: from matplotlib import pyplot as plt import numpy as np # 绘制曲线 x = np.linspace(2, 21, 20) # 取闭区间[2, 21]之间的等差数列,列表长度20 y = np.log10(x) + 0.5 plt.figure() # 添加一

  • Python matplotlib绘图时使用鼠标滚轮放大/缩小图像

    目录 思路: 示例: 输出效果: 总结 思路: 使用fig.canvas.mpl_connect()函数来绑定相关fig的滚轮事件 利用事件event的inaxes属性获取当前鼠标所在坐标系ax 使用get_xlim()函数获取坐标系ax的x/y轴坐标刻度范围 使用set()函数对坐标系ax进行放大/缩小 示例: import matplotlib.pyplot as plt import numpy as np fig = plt.figure() def call_back(event):

  • python实现在函数图像上添加文字和标注的方法

    如下所示: import matplotlib.pyplot as plt import numpy as np from matplotlib import font_manager #先确定字体,以免无法识别汉字 my_font = font_manager.FontProperties(fname= "C:/Windows/Fonts/msyh.ttc") X=np.linspace(-np.pi,np.pi,100) plt.figure(figsize=(6,5)) Y_x2

  • python Matplotlib基础--如何添加文本和标注

    创建一个优秀的可视化图表的关键在于引导读者,让他们能理解图表所讲述的故事.在一些情况下,这个故事可以通过纯图像的方式表达,不需要额外添加文字,但是在另外一些情况中,图表需要文字的提示和标签才能将故事讲好.也许标注最基本的类型就是图表的标签和标题,但是其中的选项参数却有很多.让我们在本节中使用一些数据来创建可视化图表并标注这些图表来表达这些有趣的信息.首先还是需要将要用到的模块和包导入Pycharm: import matplotlib.pyplot as plt import matplotli

  • python matplotlib工具栏源码探析二之添加、删除内置工具项的案例

    从matplotlib工具栏源码探析一(禁用工具栏.默认工具栏和工具栏管理器三种模式的差异)一文可知matplotlib内置实现了多个工具项的实现,而默认工具栏中的工具项只是其中的一部分,有没有方法直接管理工具栏,添加.删除内置工具项? matplotlib内置的工具项 由源码可知,matplotlib.backend_tools.default_tools变量为字典类型,实例化了基于matplotlib.backend_tools.ToolBase类定义的内置工具项. 源码 default_t

随机推荐