欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。


matplotlib

      • 数据可视化
      • 什么是matplotlib
      • 安装matplotlib
      • matplotlib.pyplot API介绍
      • matplotlib绘图示例
      • 图书推荐

专栏:《机器学习》


数据可视化

如果将文本数据和图表数据放在一起,人类的思维模式可能更适合于理解图表数据,因为图表数据更加直观、形象。使用图表来表示数据的方法就叫做数据可视化。可视化是在整个数据挖掘的关键辅助工具,可以帮助我们清晰的理解数据,从而调整我们的分析方法。通过可视化,能将数据更直观的呈现出来,使数据更加客观、更具说服力。
常用的数据可视化图表主要有以下五种:

什么是matplotlib

Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组(NumPy 是 Python 科学计算的软件包,ndarray 则是 NumPy 提供的一种数组结构)来绘制 2D 图像。
matplotlib 是 Python 中类似于 matlab的绘图工具,是一个常用的 2D 绘图库,当然它也提供了3D绘图接口。如果有matlab的使用经验,学习matplotlib还是很快的。matplotlib 提供了一套API来支持面向对象绘图,配合 Python GUI 工具包(比如 PyQt,WxPython、Tkinter)在应用程序中嵌入图形。与此同时,matplotlib也支持以脚本的形式在 Python、IPython Shell、JupyterNotebook 以及 Web 应用的服务器中使用,非常方便。作为Python 中最受欢迎的数据可视化软件包之一,matplotlib支持跨平台运行,它通常与NumPy、Pandas一起使用,是数据分析中不可或缺的重要工具之一。
①脚本层scripting
脚本层是matplotlib 结构中的最顶层。我们编写的绘图代码大部分代码都在该层运行,它的主要工作是负责生成图形与坐标系。
②美工层artist
美工层是结构中的第二层,它提供了绘制图形的元素时的给各种功能,例如,绘制标题、轴标签、坐标刻度等。
③后端层backend
后端层是 matplotlib 最底层,它定义了三个基本类,首先是 FigureCanvas(图层画布类),它提供了绘图所需的画布,其次是 Renderer(绘图操作类),它提供了在画布上进行绘图的各种方法,最后是 Event(事件处理类),它提供了用来处理鼠标和键盘事件的方法。
Matplotlib的图像组成如下图所示

  • Figure:指整个图形,可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等;
  • Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
  • Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小、轴标签(指 x 轴,y轴)和刻度标签;
  • Artist:在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。

安装matplotlib

matplotlib是专门用于开发2D图表(包括3D图表),以渐进、交互式方式实现数据可视化。如果你用过matlab的话,可以简单理解为和matlab有类似的功能。
安装matplotlib,直接在命令行输入(在cmd命令行输入py -0p可查看python解释器安装路径,如果pycharm提示找不到python.exe可能就是解释器路径错误)

pip3 install matplotlib

安装后,便可以在jupyter notebook或者pycharm等其他环境使用进行数据可视化

在pyharm中使用matplotlib模块的时候,可能会出现报错

解决方法如下
首先点击“文件-设置”

进入后,选择“项目-project interpreter”,点击加号

在弹框中搜索matplotlib,并安装即可

至此,安装成功。

另一个比较好的安装方法是通过下载 Python 的 Anaconda 发行版,Anaconda 是一个开源的 Python 发行版本,其包含了 Python、NumPy、Matplotlib 等180多个科学包及其依赖项。
首先,进入 Anaconda 的官方网站点击直达下载页面,然后单击“Download”按钮,如下图所示:

根据自己的Python解释器的版本下载相应版本即可。并且Anconda 中提供了一个交互式笔记本 Jupyter。

matplotlib.pyplot API介绍

Matplotlib 中的 pyplot 模块是一个类似命令风格的函数集合,和 MATLAB 非常相似。pyplot 模块提供了可以用来绘图的各种函数,比如创建一个画布,在画布中创建一个绘图区域,或是在绘图区域添加一些线、标签等。主要如下:


matplotlib绘图示例

import matplotlib.pyplot as pltimport random# 通过折线图展示温度变化# 准备数据x = range(60)y_shanghai = [random.uniform(15, 18) for i in x]# 创建画布plt.figure(figsize=(20, 8), dpi=80)# 构造x轴刻度标签x_ticks_label = ["11:{}".format(i) for i in x]# 构造y轴刻度y_ticks = range(40)# 修改x,y轴坐标的刻度显示plt.xticks(x[::5], x_ticks_label[::5])plt.yticks(y_ticks[::5])# 添加网格显示plt.grid(True, linestyle='--', alpha=0.5)# 添加x轴、y轴描述信息及标题plt.xlabel("time")plt.ylabel("temperature")plt.title("Temperature variation chart", fontsize=20)# 绘制折线图plt.plot(x, y_shanghai)# 保存图片到指定路径 plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。# plt.savefig("test.png")# 显示图像plt.show()

我们也可以通过参数设置线的风格

图书推荐

在人工智能时代,如何尽快掌握人工智能的核心—深度学习呢?相信这是每个欲进入此领域的人面临的主要问题。目前,深度学习框架很多,如TensorFlow、PyTorch、Keras、FastAI、CNTK等。面对众多的深度学习框架,初学者应如何选择?哪个框架既易于上手,又在工业界有广泛应用?毫无疑问,PyTorch是不二之选。一方面,PyTorch天然与Python结合,大大降低了深度学习的门槛;另一方面,它的流行度仅次于TensorFlow,而且有赶超之势,但是上手难度却比TensorFlow低很多。如果你是一位初学者,建议你选择PyTorch,待有了一定的基础之后,可以学习其他框架,如TensorFlow、CNTK等。
下面推荐一本能够指导读者快速掌握PyTorch和深度学习的著作,从PyTorch的原理到应用,从深度学习到强化学习,该书提供了全栈解决方案。

书名:《Python深度学习:基于PyTorch 第2版》
作者:吴茂贵 郁明敏 杨本法 李涛 等著
出版社:机械工业出版社

图书介绍
本书分为三部分,共19章,第一部分为PyTorch基础,第二部分为深度学习基本原理,第三部分是实战内容。
第一部分(第1~4章)为Python和PyTorch基础部分,也是本书的基础部分,为后续学习打下一个坚实基础。第1章介绍了PyTorch的基石NumPy;第2章介绍PyTorch基础;第3、4章分别介绍PyTorch构建神经网络工具箱和数据处理工具箱等内容。
第二部分(第5~10章)为机器学习、深度学习部分,这是本书核心部分。第5章为机器学习基础;第6章为视觉处理基础;第7章介绍自然语言处理基础;第8章介绍注意力机制,详解介绍Transformer架构;第9章介绍目标检测与语义分割;第10章介绍生成式深度学习相关内容,包括AE,VAE,GAN、CGAN等模型。
第三部分(第11~19章)为深度学习实战,也即前面两部分的具体应用部分。这部分在介绍相关原理、架构的基础上,用PyTorch具体实现的典型实例,最后介绍了强化学习、深度强化学习等内容。具体各章节内容为,第11章用PyTorch实现人脸检测和识别;第12章用PyTorch实现迁移学习、迁移学习结合数据增强等实例;第13章用PyTorch实现中英文互译;第14章介绍了基于Transformer架构的ViT进行图像分类;第15章为语义分割实例;第16章多个生成式网络实例;第17章介绍对抗攻击原理及PyTorch实现对抗攻击实例;第18、19章介绍了强化学习、深度强化学习等基础及多个强化学习实例。
更为重要的是,为了让本书通俗易懂,在内容安排和写作方式上也颇花了一番心思。内容选择上,广泛涉猎、重点突出、注重实战;内容安排上,实例切入、由浅入深、循序渐进;表达形式上,深度抽象、化繁为简、用图说话。