首页 > 其他分享 >【matplotlib基础】--文本标注

【matplotlib基础】--文本标注

时间:2023-09-10 19:22:34浏览次数:33  
标签:-- matplotlib color fontdict fontsize ax 文本 标注

Matplotlib 文本和标注可以为数据和图形之间提供额外的信息,帮助观察者更好地理解数据和图形的含义。

文本用于在图形中添加注释或提供更详细的信息,以帮助观察者理解图形的含义。
标注则是一种更加细粒度的文本信息,可以被用来为特定的数据点或区域提供更详细的信息。

本篇通过示例依次介绍文本和标注的常用使用方式。

1. 文本

文本在图形中主要用在标题,坐标轴,图形中的一些说明等等地方。

1.1. 颜色和字体

下面的示例演示了图形中各个部分文本的字体大小和颜色设置的方法:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = x*x 

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

#设置 标题 的字体和颜色
ax.set_title("标题", fontdict={"fontsize": 25, "color": "r"})

#设置 X轴和Y轴 标签的字体和颜色
ax.set_xlabel("x轴", fontdict={"fontsize": 20,"color": "g"})
ax.set_ylabel("y轴", fontdict={"fontsize": 20,"color": "b"})

#按照坐标位置(2, 60)添加一段文本
ax.text(2, 60, "f(x) = x*x", fontdict={"fontsize": 15,"color": "k"})
ax.plot(x, y, label="sin")
ax.legend()

image.png

需要掌握的部分就是 fontdict 这个参数,这个字典还有其他参数可以控制字体,这里只演示了两个常用的参数:

  1. fontsize:字体大小设置
  2. color:文字颜色

1.2. latex公式

上面的示例中,f(x) = x*x 可以 latex的方式来显示。
latex让能够显示各种复杂的数学公式,让文本看起来和数学书中一样。


x = np.linspace(0, 10, 100)
y = x*x 

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

#设置 标题 的字体和颜色
ax.set_title("标题", fontdict={"fontsize": 25, "color": "r"})

#设置 X轴和Y轴 标签的字体和颜色
ax.set_xlabel("x", fontdict={"fontsize": 20,"color": "g"})
ax.set_ylabel("$x^2$", fontdict={"fontsize": 20,"color": "b"})

#按照坐标位置(2, 60)添加一段文本
ax.text(2, 60, "$f(x) = x^2$", fontdict={"fontsize": 15,"color": "k"})
ax.plot(x, y, label="sin")
ax.legend()

image.png

上面将 Y轴的文本图形中间的数学公式改成了 latex 格式。

2. 标注

图形添加标注时,一般包含2个部分,一个指向数据的箭头,一段说明文字。
设置标注的核心参数是:

  1. xy:这是待标注的数据点的坐标
  2. xytext:标注文本的坐标,一般是文本的左上角的点
  3. bbox:文本框的样式字典
  4. arrowprops:箭头的样式字典

下面的示例中,通过设置上面4个参数来演示几种常用的标注:

x = np.array(range(10))
y = np.array([89, 84, 30, 67, 41, 71, 62, 20, 89, 3])

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y)

ax.annotate(
    "第一个值",
    xy=(0, 89),
    xytext=(-0.3, 70),
    arrowprops={"arrowstyle": "->", "connectionstyle": "arc3,rad=-0.5"},
)

ax.annotate(
    "转折点一",
    xy=(2, 30),
    xytext=(1.8, 10),
    bbox={"boxstyle": "round", "fc": "none", "ec": "g"},
    arrowprops={"arrowstyle": "->"},
)

ax.annotate(
    "转折点二",
    xy=(3, 67),
    xytext=(3, 85),
    bbox={"boxstyle": "round", "fc": "lightblue", "ec": "r"},
    arrowprops={"arrowstyle": "fancy"},
)

ax.annotate(
    "最大值",
    xy=(8, 89),
    xytext=(6, 85),
    bbox={"boxstyle": "round", "alpha":0.1},
    arrowprops={"arrowstyle": "wedge,tail_width=0.8", "alpha":0.1},
)

image.png

  1. 第一个值:设置了箭头的弯曲度
  2. 转折点一:设置了边框
  3. 转折点二:设置了边框和背景色,同时设置了另一种箭头样式
  4. 最大值:设置了边框和另一种箭头的透明度。

3. 总结

在使用 Matplotlib 进行数据可视化时,合理使用文本和标注可以大大提高图形的可读性和易懂性,帮助观察者更好地理解数据和图形的含义。

但是,分析结果中是最重要的还是图形和数据,文本和标注不宜过度添加,也不能太花哨,以致喧宾夺主,本末倒置。

标签:--,matplotlib,color,fontdict,fontsize,ax,文本,标注
From: https://www.cnblogs.com/wang_yb/p/17691699.html

相关文章

  • 20211105李宜时《信息安全系统设计基础》第一周学习总结
    20211105李宜时《信息安全系统设计基础》第一周学习总结老师好,我针对教科书和云班课上面的知识学习了这门课第一章和第二章的知识Linux的一些常用的命令ls:用于列出目录中的文件和子目录。cd:用于改变当前工作目录。pwd:显示当前工作目录的路径。mkdir:创建新的目录。rmdir:删......
  • esm中的符号绑定
    在使用结构赋值的时候,如下图,打印的count都是1,因为结构赋值其实重新开辟了一块内存空间。在用esm导出的时候会发现第二个count变成了2,这是因为他们是同一块内存空间。这叫做符号绑定。解决:导出的时候使用常量const......
  • ElasticSearch+Kibana on K8s 讲解与实战操作(版本7.17.3)
    目录一、概述二、ElasticSearch节点类型与作用三、K8s集群部署四、ElasticSearchonK8s开始部署1)下载安装包2)构建镜像3)修改yaml编排4)开始部署5)测试6)elasticsearch-head5)卸载五、Kibana编排部署1)下载安装包2)构建镜像3)修改yaml编排4)开始部署5)测试验证6)卸载六、Elasticsearch7......
  • 第一、二章学习笔记
    一、知识点总结第一章Unix和Linux是两个相关但不完全相同的概念。下面是它们的概论知识点总结:Unix:Unix是一种操作系统家族,设计目标是提供一个可移植、多用户、多任务的操作系统。Unix采用了分层架构,将操作系统划分为内核等组件。Unix引入了许多重要的概念和工具,如文件描述符......
  • 就archlinux系统中apache 无法启动php的原因
    原文连接背景,在archlinux里面想使用apache作为服务器启动php服务,根据ArchWiki 的配置,并不成功检验原因:sudosystemctlstatushttpd结果:systemctlstatusapachesystemd[1]:StartedApacheWebServerhttpd[1444]:httpd:Syntaxerroronline542of/etc/httpd......
  • 【转载】典例
    本文改编自真实事件典例[每逢夏季,折花市总是会迎来最难熬的一段日子,空气中总是有一股热浪,蝉有气无力的嘶鸣着,像是要把这难熬的痛苦一并呕出来;街上静悄悄的,偶尔会有车经过的声音,适逢六月下旬,又到了一个学期的尾声,远处依稀听到孩子们的欢声笑语,可以判断出是考试结束后,大家正满怀期待......
  • Codeforces Round 811 (Div. 3) A. Everyone Loves to Sleep
    闹钟设有\(n\)个时间点,第\(i\)个时间为\((H_i,M_i)\)。在\(h,m\)时刻入睡,响铃必须起床,问能睡多久。使用\(set<pair<int,int>>\)存储闹铃时刻,然后在其中\(lower_{bound}\)到\(<first\geqh,second\geqm>\)的迭代器\(it\)。若\(it=end\),则\(it=begin......
  • 7种数据库的存在则更新,不存在则插入(UPSERT)SQL写法
    在工作中遇到了这么一个需求,在往数据库插入数据时,如果一条数据不存在则插入,如果存在(根据主键或唯一索引判断)则更新,也就是所谓的UPSERT操作。大部分数据库都没有UPSERT语句,不过他们都有一些SQL的写法来实现这样的操作。1.MySQL使用ONDUPLICATEKEYUPDATE,如果要插入这条数据将......
  • 【题解】[ABC318F] Octopus(思维)
    【题解】[ABC318F]Octopus题目链接F-Octopus题意概述有个机器人,它有\(n\)个手臂,第\(i\)个手臂长度为\(l_i\)。同时有\(n\)个宝藏,第\(i\)个宝藏的坐标是\(x_i\)。当机器人位于\(k\)时,它的第\(i\)条手臂可以够到\([k-l_i,k+l_i]\)范围内的宝藏。机器人的每......
  • 练习:分治算法--有序数组寻找中位数
    题:给定两个长度为m和n有序组数array1和array2,请找出这个有序数组的中位数。'''eg.[1,3]和[5,6],中位数是4[1,2,5,8,9]和[2,3,4,5],中位数是4'''###直接方法,使用内置排序函数sort#时间复杂度最高:O((n+m)log(n+m)),空间复杂度:O(n+m)1classSolution(object):2deff......