音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

Matplotlib可视化之添加让统计图变得简单易懂的注释
日期:2021-09-08 14:42:25   来源:脚本之家

一、前言

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

二、添加标题

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

import numpy as np
import matplotlib.pyplot as plt
x = 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()

添加标题Tips:

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

三、为坐标轴添加标签

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

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

为坐标轴添加标签Tips:

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

四、添加文本说明

虽然我们已经学习了如何图形添加标题,以及为坐标轴添加注释,但是,很多时候我们还需要在图形中添加说明文本,来凸显图中点或线的重要性。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 8, 1000)
y = 2.0 * x + 0.5 * 5 * x ** 2
plt.title('Acceleration Moving')
plt.xlabel('Time')
plt.ylabel('distance')
plt.scatter(x[0],y[0])
plt.text(x[0], y[0], 'start')
plt.plot(x, y, c = 'c')
plt.show()

添加说明文本

Tips:plt.text()函数接受要显示的位置和文本作为参数。位置以坐标形式给出,其指定了文本框左下角的位置。

五、文本的对齐方式

文本外围包含隐式文本框(下文会介绍文本框的显示方法),此框用于将文本与传递给plt.text()的坐标进行相对对齐。使用verticalalignmenthorizontalalignment参数(它们分别可以简写为vaha)控制对齐的方式。
垂直对齐选项如下所示:

参数值 说明
center 参数坐标相对于文本框的中心
top 参数坐标相对于文本框的上侧
bottom 参数坐标相对于文本框的底部
baseline 参数坐标相对于文本的基线
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 8, 1000)
y = 2.0 * x + 0.5 * 5 * x ** 2
x_b = np.linspace(0, 8, 1000)
y_b = np.zeros_like(x_b)
plt.title('Acceleration Moving')
plt.xlabel('Time')
plt.ylabel('distance')
plt.scatter(x[0],y[0])
plt.text(0, 0, 'center', va='center')
plt.text(2, 0, 'top', va='top')
plt.text(4, 0, 'bottom', va='bottom')
plt.text(6, 0, 'baseline', va='baseline')
plt.plot(x, y, c = 'c')
plt.plot(x_b, y_b, c = 'm')
plt.show()

垂直对齐

水平对齐选项如下所示:

参数值 说明
center 参数坐标相对于文本框的中心
left 参数坐标相对于文本框的左侧
right 参数坐标相对于文本框的右侧
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 8, 1000)
y = 2.0 * x + 0.5 * 5 * x ** 2
y_b = np.linspace(0, 100, 1000)
x_b = np.zeros_like(y_b)
plt.title('Acceleration Moving')
plt.xlabel('Time')
plt.ylabel('distance')
plt.scatter(x[0],y[0])
plt.text(0, 0, 'center', ha='center')
plt.text(0, 50, 'left', ha='left')
plt.text(0, 100, 'right', ha='right')
plt.plot(x, y, c = 'c')
plt.plot(x_b, y_b, c = 'm')
plt.show()

水平对齐选项

六、文本边界框

上文介绍了文本外围包含隐式文本框,为了可以显式的绘制文本框,plt.plot()支持一个以字典为输入的bbox参数,此词典用于定义文本框的外观配置:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 8, 1000)
y = 2.0 * x + 0.5 * 5 * x ** 2
box = {
    'facecolor': '.75',
    'edgecolor': 'r',
    'boxstyle': 'round'
}
plt.title('Acceleration Moving')
plt.text(0, 8, 'start', bbox=box)
plt.plot(x, y, c = 'c')
plt.show()

文本边界框

bbox参数的字典定义包含以下常见键值对:

说明与可选值
facecolor 用于设置文本框背景和边的颜色
edgecolor 用于设置文本框边缘的颜色
alpha 用于设置透明度级别,使文本框与背景更好的混合
boxstyle 设置文本框的样式,可选值包括"round"和"square"
pad 如果"boxstyle"设置为"square",则它定义文本和文本框边之间的填充量

七、添加箭头

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

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 8, 1000)
y = 2.0 * x + 0.5 * 5 * x ** 2
plt.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()

添加箭头

Tips:plt.annotate()函数在显示与plt.text()作用相同的说明文本文本外,同时也会渲染箭头。要显示的说明文本是第一个参数;xy参数指定箭头的目标;xytext参数指定文本位置,同样可以通过ha和va参数来改变文本对齐方式
箭头的样式由传递给arrowprops参数的字典控制,其中常用的键值包括:

说明与可选值
arrowstyle 控制箭头的样式,可选值包括"<-"、"<"、“wedge”、"simple"和"fancy"等
facecolor 用于设置箭头背景和边的颜色
edgecolor 用于设置箭头边的颜色
alpha 用于设置透明度级别,使箭头与背景更好的混合

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

八、添加图例

在复杂图形中,往往包含大量不同的曲线和点,如果这些曲线和点没有相应的图例,将无法对其进行准确的区分,因此图例在实践中是必不可少的。
使用plt.legend()函数以及绘图函数的label可选参数,可以添加图例:

import numpy as np
import matplotlib.pyplot as plt
x = 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()

添加图例

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官网。

import numpy as np
import matplotlib.pyplot as plt
x = 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()

使用LaTex符号示例

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']进行设置:

import numpy as np
import matplotlib.pyplot as plt
x = 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()

使用中文字符

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

系列链接

学会Python-Matplotlib可视化,快速完成数据分析(1)

一文详解常见统计图的绘制学会Python-Matplotlib可视化,快速完成数据分析(2)

到此这篇关于Matplotlib可视化之添加让统计图变得简单易懂的注释的文章就介绍到这了,更多相关Matplotlib可视化内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程