matplotlib
数据可视化是什么
如果将文本数据与图表数据相比较,人类的思维模式更适合于理解后者,原因在于图表数据更加直观且形象化,它对于人类视觉的冲击更强,这种使用图表来表示数据的方法被叫做数据可视化。
当使用图表来表示数据时,我们可以更有效地分析数据,并根据分析做出相应的决策。在学习 Matplotlib 之前,了解什么是数据可视化!
数据可视化
图表为更好地探索、分析数据提供了一种直观的方法,它对最终分析结果的展示具有重要的作用。
当您对一个数据集进行分析时,如果使用数据可视化的方式,那么您会很容易地确定数据集的分类模式、缺失数据、离群值等等。下图展示了五个常用的数据可视化图表:
图2:数据可视化常用图表
对于组织决策者而言,数据可视化也只是一种辅助工具,从寻找数据间关联到最终做出决定,大致分为以下四步。如下图所示:
组织者决策流程图
下面对图中的流程进行简要说明:
- 可视化(Visualize):使用不同种类的图表对原始数据进行可视化处理,使复杂的数据更容易理解与使用;
- 分析(Analysis):数据分析的目的是获取有用的信息,这个过程主要涉及对数据的清洗、检查、转换以及对数据的建模;
- 文档说明(Document insight):文档说明属于整理、汇总阶段,将有用的数据或者信息整理出来;
- 数据集转换(Transform Data Set):指将数据进行分类、分级、统计记录格式与编码格式等。
数据可视化应用场景
数据可视化主要有以下应用场景:
- 企业领域:利用直观多样的图表展示数据,从而为企业决策提供支持;
- 股票走势预测:通过对股票涨跌数据的分析,给股民提供更合理化的建议;
- 商超产品销售:对客户群体和所购买产品进行数据分析,促使商超制定更好的销售策略;
- 预测销量:对产品销量的影响因素进行分析,可以预测出产品的销量走势。
其实不管是在日常生活,还是工作中,我们都会根据过往的经验作出某些决定,这种做法也叫做“经验之谈”。数据分析和其类似,通过对过往数据的大量分析,从而对数据的未来走势做出预测。
Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂,深受广大技术爱好者喜爱。
NumPy 是 Python 科学计算的软件包,ndarray 则是 NumPy 提供的一种数组结构。
Matplotlib 由 John D. Hunter 在 2002 年开始编写, 2003 年 Matplotlib 发布了第一个版本,并加入了 BSD 开源软件组织。Matplotlib 1.4 是最后一个支持 Python 2 的版本,它的最新版本 3.1.1 已于 2019 年 7 月 1 日发布。
图1:Matplotlib 图标
Matplotlib 提供了一个套面向绘图对象编程的 API 接口,能够很轻松地实现各种图像的绘制,并且它可以配合 Python GUI 工具(如 PyQt、Tkinter 等)在应用程序中嵌入图形。同时 Matplotlib 也支持以脚本的形式嵌入到 IPython shell、Jupyter 笔记本、web 应用服务器中使用。
Matplotlib架构组成
Matplotlib 由三个不同的层次结构组成,分别是脚本层、美工层和后端层。
图2:Matplotlib架构图
1) 脚本层
脚本层是 Matplotlib 结构中的最顶层。我们编写的绘图代码大部分代码都在该层运行,它的主要工作是负责生成图形与坐标系。
2) 美工层
美工层是结构中的第二层,它提供了绘制图形的元素时的给各种功能,例如,绘制标题、轴标签、坐标刻度等。
3) 后端层
后端层是 Matplotlib 最底层,它定义了三个基本类,首先是 FigureCanvas(图层画布类),它提供了绘图所需的画布,其次是 Renderer(绘图操作类),它提供了在画布上进行绘图的各种方法,最后是 Event(事件处理类),它提供了用来处理鼠标和键盘事件的方法。
Matplotlib图形组成
Matplotlib 生成的图形主要由以下几个部分构成:
- Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等;
- Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
- Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签;
- Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。
Matplotlib功能扩展包
许多第三方工具包都对 Matplotlib 进行了功能扩展,其中有些安装包需要单独安装,也有一些允许与 Matplotlib 一起安装。常见的工具包如下:
- Bashmap:这是一个地图绘制工具包,其中包含多个地图投影,海岸线和国界线;
- Cartopy:这是一个映射库,包含面向对象的映射投影定义,以及任意点、线、面的图像转换能力;
- Excel tools: 这是 Matplotlib 为了实现与 Microsoft Excel 交换数据而提供的工具;
- Mplot3d:它用于 3D 绘图;
- Natgrid:这是 Natgrid 库的接口,用于对间隔数据进行不规则的网格化处理。
Matplotlib安装
Matplotlib 是 Python 的第三方绘图库,它非常类似于 MATLAB。在使用 Matplotlib 软件包之前,需要对其进行安装。本节以 Windows10 系统为例,介绍 Matplotlib 的几种安装方式。
MATLAB 是一款商业软件,主要用于数据分析、图像处理、计算机视觉等领域。
使用pip理器安装
使用 Python 包管理器 pip 来安装 Matplotlib 是一种最轻量级的方式。打开 CMD 命令提示符窗口,并输入以下命令:
pip install matplotlib
图1:pip安装Matplotlib
使用Anaconda安装
安装 Matplotlib 的最好的方法是下载 Python 的 Anaconda 发行版,因为 Matplotlib 被预先安装在 Anaconda 中。安装方法如下:
Anaconda 是一个开源的 Python 发行版本,其包含了 Python、NumPy、Matplotlib 等180多个科学包及其依赖项。
1) 访问 Anaconda 的官方网站(点击前往),然后单击“Download”按钮,如下图所示:
图2:Anaconda官网
2) 根据您的 Python 解释器版本选择相应的 Anaconda 版本下载。
图3:Anacona下载
Anconda 中提供了一个交互式笔记本 Jupyter,您可以把它理解为 IPython 的升级本,它拥有比 IPython 更强大的功能,方便您对程序代码的实时调试。
Jupyter 的本质上是一个 Web 应用程序,它支持运行 40 多种编程语言,主要应用于数据可视化、数值模拟、统计建模以及机器学习等。
当您成功安装 Anaconda 后,您可以通过系统的开始菜单找到 Jupyter,然后启动它,Jupyter 界面如下所示:
图4:Jupyter交互式笔记本
Jupyter 使用方法简单,在本教程不做具体介绍,可以参见官网《Jupyter Notbook使用介绍》。
验证安装
要验证 Matplotlib 是否成功安装,可以在命令提示符窗口执行以下命令
import matplotlib
matplotlib.version
'3.1.1'
Matplotlib基本类型
绘图类型
绘图类型 | |
---|---|
函数名称 | 描述 |
Bar | 绘制条形图 |
Barh | 绘制水平条形图 |
Boxplot | 绘制箱型图 |
Hist | 绘制直方图 |
his2d | 绘制2D直方图 |
Pie | 绘制饼状图 |
Plot | 在坐标轴上画线或者标记 |
Polar | 绘制极坐标图 |
Scatter | 绘制x与y的散点图 |
Stackplot | 绘制堆叠图 |
Stem | 用来绘制二维离散数据绘制(又称为“火柴图”) |
Step | 绘制阶梯图 |
Quiver | 绘制一个二维按箭头 |
Image函数
图像函数 | |
---|---|
函数名称 | 描述 |
Imread | 从文件中读取图像的数据并形成数组。 |
Imsave | 将数组另存为图像文件。 |
Imshow | 在数轴区域内显示图像。 |
Axis函数
Axis函数 | |
---|---|
函数名称 | 描述 |
Axes | 在画布(Figure)中添加轴 |
Text | 向轴添加文本 |
Title | 设置当前轴的标题 |
Xlabel | 设置x轴标签 |
Xlim | 获取或者设置x轴区间大小 |
Xscale | 设置x轴缩放比例 |
Xticks | 获取或设置x轴刻标和相应标签 |
Ylabel | 设置y轴的标签 |
Ylim | 获取或设置y轴的区间大小 |
Yscale | 设置y轴的缩放比例 |
Yticks | 获取或设置y轴的刻标和相应标签 |
Figure函数
Figure函数 | |
---|---|
函数名称 | 描述 |
Figtext | 在画布上添加文本 |
Figure | 创建一个新画布 |
Show | 显示数字 |
Savefig | 保存当前画布 |
Close | 关闭画布窗口 |
import numpy as np
from matplotlib import pyplot as plt
import math
x=np.arange(0,math.pi*2,0.1)
y=np.sin(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("sin(angle)")
plt.title("sin")
plt.plot(x,y)
plt.show()
代码执行后,显示结果如下: