Matplotlib在图形中添加注释

简介: 如果没有注释,我们很难让其他人明白图中的点、线究竟代表着什么,有什么样的含义,Matplotlib提供了大量对图形进行注释的方法,利用这些注释使统计图变得通俗易懂。

前言

我们可以用 Matplotlib 绘制出复杂而又精美的统计图,但是如果没有注释,我们很难让其他人明白图中的点、线究竟代表着什么,有什么样的含义,也就失去了统计图的意义,为了解决这一问题,Matplotlib 提供了大量对图形进行注释的方法,这些注释方法对于所有的绘图函数(如 plt.plot()、plt.scatter()、plt.histogram() 等)都是通用的,利用这些注释可以使统计图变得通俗易懂。

添加标题

从最简单的添加标题开始:

importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(-4, 4, 10005)
y=5* (x+4.2) * (x+4.) * (x-2.5)
plt.title('A polynomial')
plt.plot(x, y, c='m')
plt.show()

绘图58.png

Tips:plt.title()函数接受一个字符串作为参数并将其作为整个图形的标题。

为坐标轴添加标签

在实际应用中,对统计图坐标轴的适当描述有助于用户理解图形所表达的含义。

importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0, 8, 1000)
y=2.0*x+0.5*5*x**2plt.title('Acceleration Moving')
plt.xlabel('Time')
plt.ylabel('distance')
plt.plot(x, y, c='c')
plt.show()

绘图60.png

Tips:使用plt.xlabel()和plt.ylabel()函数分别为水平轴和垂直轴添加注释。

添加箭头

添加文本框当然可以帮助注释图形,但有时当说明文本过多,并不能清楚的说明究竟与图形的那一部分相对应,因此要说明图形中的特定部分,没有什么比使用箭头更好的了, Matplotlib 使用 plt.annotate() 函数绘制箭头。

importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0, 8, 1000)
y=2.0*x+0.5*5*x**2plt.annotate('start',
ha='center', va='bottom',
xytext= (2, 30.),
xy= (0, 0),
arrowprops= { 'facecolor' : 'black', 'shrink' : 0.05 })
plt.title('Acceleration Moving')
plt.plot(x, y, c='c')
plt.show()

绘图62.png

Tips:plt.annotate()函数在显示与 plt.text() 作用相同的说明文本文本外,同时也会渲染箭头。要显示的说明文本是第一个参数;xy 参数指定箭头的目标;xytext 参数指定文本位置,同样可以通过 ha 和 va 参数来改变文本对齐方式。

箭头的样式由传递给 arrowprops 参数的字典控制,其中常用的键值包括:

说明与可选值

arrowstyle

控制箭头的样式,可选值包括 "<-"、"<"、"wedge"、"simple" 和 "fancy" 等

facecolor

用于设置箭头背景和边的颜色

edgecolor

用于设置箭头边的颜色

alpha

用于设置透明度级别,使箭头与背景更好的混合

收缩参数控制箭头端点和箭头本身之间的间隙。

添加图例

在复杂图形中,往往包含大量不同的曲线和点,如果这些曲线和点没有相应的图例,将无法对其进行准确的区分,因此图例在实践中是必不可少的。

使用 plt.legend() 函数以及绘图函数的 label 可选参数,可以添加图例:

importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0, 6, 1024)
data=np.random.standard_normal((150, 2))
print(data.size)
y_1=np.sin(x)
y_2=np.cos(x)
plt.xlabel('x')
plt.ylabel('y')
plt.plot(x, y_1, c='m', lw=3., label='sin(x)')
plt.plot(x, y_2, c='c', lw=3., ls='--', label='cos(x)')
plt.scatter(data[:,0],data[:,1],c='y', label='random')
plt.legend()
plt.show()

绘图63.png

Tips:每个plt绘图函数(如 plt.plot()、plt.scatter() 等)都有一个可选的 label 参数来命名图形的元素。plt.legend() 函数的作用是呈现图例,图例是根据标签自动生成的。

plt.legend() 函数包含可选参数来控制图例的呈现:

参数

说明与可选值

loc

用于控制图例的位置,默认值为 "best",将以适合的方式自动放置图例,其他可选值包括 "upper left"、"lower left"、"lower right"、"right"、"center left"、"center right"、"lower center"、"upper center" 和 "center"

shadow

可选值包括True和False,用于设置是否使用阴影效果呈现图例

fancybox

可选值包括True和False,用于是否使用圆角框呈现图例

title

用于为图例设置标题

ncol

强制设置图例的列数

使用LaTex风格的符号

我们已经学习了为图形添加多种注释的方法。然而,在实践中,我们通常需要使用数学符号,因此,我们需要使用 LaTex 语法来添加数字符号。

要使用 LaTex 风格的符号,首先需要在计算机上安装可用的 LaTeX 配置,以便 Matplotlib 可以解释 LaTeX 语法来呈现数学文本。有关于安装LaTeX的方法,不在本文的主题范围内,大家可以根据自己的操作系统检索安装方法.

LaTex简介

LaTex 是学术界广泛使用的一种文献排版系统。与 Microsoft Word 等文档编辑器不同,LaTeX 用户在编辑文档时无法看到其最终显示效果。文档被描述为纯文本文档中存储的文本及命令。最终,LaTeX 将解释文档以进行呈现。在科学和工程界,LaTeX 的公式语言通常用于在电子邮件和论坛中编写数学文本。

使用LaTex符号示例

使用 LaTex 风格的符号时,函数接受的字符串参数值以“$”字符开头和结尾,这是向 Matplotlib 发出信号,以将文本解释并呈现为 LaTeX 样式的数学文本。字符串的内容就是数学文本的标准语言,关于 Matplotlib 中 LaTeX 样式的数学文本的介绍,可以参考Matplotlib官网

importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(-4, 4, 10005)
y=3/5* (x+4.2) * (x+4.) * (x-2.5)
plt.title('$f(x)=\\frac{3}{5}(x+4.4)(x+4)(x-2.5)$')
plt.plot(x, y, c='k')
plt.show()

绘图59.png

Tips:这种 LaTex 风格的符号不限于标题,它可以用于任何其它注释。LaTeX 语言在很大程度上依赖于转义字符 \,但此符号恰好也是 Python 的字符串转义字符。因此,如果要在一个 LaTeX 文本中使用 \ 作为转移字符,需要在 Python 字符串中使用两个 \。为了避免漏掉转义字符,可以在字符串前面加上 r,这样就不需要任何转义字符了,即:"$f(x)=\\frac{1}{4}(x+4)(x+1)(x-2)$" 等价于 r'$f(x)=\frac{1}{4}(x+4)(x+1)(x-2)$'。

使用中文字符

中文是使用 Matplotlib 的一个痛点,但是在实际应用中,又不可避免的会使用到中文用于统计图注释的显示,如果不进行配置,会将中文字符显示为乱码。

使用中文字符作为注释有多种方式,这里本着简单就是最优的理念,使用 plt.rcParams['font.sans-serif'] 进行设置:

importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0, 6, 1024)
data=np.random.standard_normal((150, 2))
y_1=np.sin(x)
y_2=np.cos(x)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('中文字符使用示例')
plt.plot(x, y_1, c='m', lw=3., label='正弦函数')
plt.plot(x, y_2, c='c', lw=3., ls='--', label='余弦函数')
plt.scatter(data[:,0],data[:,1],c='y', label='随机点')
plt.rcParams['font.sans-serif'] = ['SimSun']
plt.legend()
plt.show()

绘图64.png

Tips:使用 plt.rcParams['font.sans-serif'] 设定支持中文字符的字体,使用中文字符的用法范围与 LaTex 风格的符号一样,它可以用于所有注释,另外需要确保系统支持所设定的中文字符字体。

相关文章
|
4月前
|
存储 编解码 数据可视化
【Matplotlib】figure方法之图形的保存
【Matplotlib】figure方法之图形的保存
140 1
|
4月前
|
数据可视化 Python
GEE Colab——如何利用Matplotlib在colab中进行图形制作
GEE Colab——如何利用Matplotlib在colab中进行图形制作
97 3
|
2月前
|
数据可视化 Linux 数据格式
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
|
2月前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
|
2月前
|
数据采集 数据可视化 数据处理
我们来看一个简单的`matplotlib`代码示例,它使用`plot()`和`scatter()`函数来绘制二维图形。
我们来看一个简单的`matplotlib`代码示例,它使用`plot()`和`scatter()`函数来绘制二维图形。
|
4月前
|
存储 数据可视化 算法
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
|
4月前
|
缓存 Linux API
如何使用Matplotlib绘制出美观实用的图形?
如何使用Matplotlib绘制出美观实用的图形?
|
4月前
|
编解码 数据可视化 索引
【Matplotlib】Figure图形中的图表元素怎么获取,你掌握了吗!?
【Matplotlib】Figure图形中的图表元素怎么获取,你掌握了吗!?
53 1
|
4月前
|
Python
Matplotlib figure图形对象
Matplotlib figure图形对象
67 1
|
数据可视化 前端开发 UED
matplotlib图形整合之多个子图一起绘制
matplotlib图形整合之多个子图一起绘制
657 0
matplotlib图形整合之多个子图一起绘制