python常用模块Matplotlib:大数据处理之数据可视化绘图

转载自品略图书馆 http://www.pinlue.com/article/2020/03/0118/109961853318.html

 

说到数据分析,Python 完全能够胜任这方面的工作。Python 究竟如何在数据分析领域做到游刃有余?因为它有“四板斧”,分别是Matplotlib、NumPy、SciPy/Pandas。Matplotlib 是画图工具,NumPy 是矩阵运算库,SciPy 是数学运算工具,Pandas 是数据处理的工具。

1 为什么选择 Matplotlib?

Python 有很多强大的画图库,为什么我偏偏独爱 Maplotlib?我先买个关子,先来看看还有哪些库。

Seaborn

Seaborn 是一个基于 Matplotlib 的高级可视化效果库, 偏向于统计作图。因此,针对的点主要是数据挖掘和机器学习中的变量特征选取。相比 Matplotlib ,它语法相对简化些,绘制出来的图不需要花很多功夫去修饰。但是它绘图方式比较局限,不过灵活。

Bokeh

Bokeh 是基于 javascript 来实现交互可视化库,它可以在WEB浏览器中实现美观的视觉效果。但是它也有明显的缺点。其一是版本时常更新,最重要的是有时语法还不向下兼容。这对于我们来说是噩梦。其二是语法晦涩,与 matplotlib做比较,可以说是有过之而无不及。

ggplot

ggplot 是 yhat 大神基于 R 语言的 ggplot2 制作的 python 版本库。 如果你使用 R 语言的话,ggplot2 可以算是必不可少的工具。所以,很多人都推荐使用该库。不过可惜的是,yhat 大神已经停止维护该库了。

Plotly

Plotly 也是一个做可视化交互的库。它不仅支持 Python 还支持 R 语言。Plotly 的优点是能提供 WEB 在线交互,配色也真心好看。如果你是一名数据分析师,Plotly 强大的交互功能能助你一臂之力完成展示。

Mapbox

Mapbox 使用处理地理数据引擎更强的可视化工具库。如果你需要绘制地理图,那么它值得你信赖。

总之, Python 绘图库众多,各有特点。但是 Maplotlib 是最基础的 Python 可视化库。如果你将学习 Python 数据可视化。那么 Maplotlib 是非学不可,然后再学习其他库做纵横向的拓展。

2 Matplotlib 能绘制什么图?

Matiplotlib 非常强大,所以最基本的图表自然不在话下。例如说:

直线图

曲线图

柱状图

直方图

饼图

散点图

只能绘制这些最基础的图?显示是不可能的,还能绘制些高级点的图

例如:

高级点的柱状图

等高线图

类表格图形

不仅仅只有这些,还能绘制 3D 图形。例如:

三维柱状图

3D 曲面图

因此,Matplotlib 绘制的图种类能够满足我们做数据分析了。

3 安装 Matplotlib

看到这里,你是否惊叹不已,很很迫不及待地想学习 Matplotlib。而工欲善其事,必先利其器。我们先来学习如何安装 Matplotlib。其实也是很简单,我们借助 pip 工具来安装。

在终端执行以下命令来安装 Matplotlib

1 基础知识

在学习绘制之前,先来了解下 Matplotlib 基础概念。

1.1 库

我们绘制图形主要用到两个库,matplotlib.pyplot和numpy。在编码过程中,这两个库的使用频率较高,而这两个库的名字较长。这难免会给我们带来不便。所以我们一般给其设置别名, 大大减少重复性工作量。具体如下代码:

numpy 是 Python 用于数学运算的库,它是在安装 matplotlib 时候顺带安装的。pyplot 是 matplotlib 一个子模块,主要为底层的面向对象的绘图库提供状态机界面。状态机隐式地自动创建数字和坐标轴以实现所需的绘图。 matplotlib 中的所有内容都按照层次结果进行组织。顶层就是由 pyplot 提供的 matplotlib “状态机环境”。基于这个状态机环境,我们就可以创建图形。

1.2 图形组成标签

我在 matplotlib 官网上找图像组件说明图并在上面增加中文翻译。通过这张图,我们对 matplotlib 整体地认识。

接下来,我主要讲解 matplotlib 中几个重要的标签。

Figure

Figure 翻译成中文是图像窗口。Figure 是包裹 Axes、tiles、legends 等组件的最外层窗口。它其实是一个 Windows 应用窗口 。

Figure 中最主要的元素是 Axes(子图)。一个 Figure 中可以有多个子图,但至少要有一个能够显示内容的子图。

Axes

Axes 翻译成中文是轴域/子图。Axes 是带有数据的图像区域。从上文可知,它是位于 Figure 里面。那它和 Figure 是什么关系?这里可能文字难以表述清楚,我以图说文。用两图带你彻底弄清它们的关系。

根据运行结果图,我们不难看出。左图的 Figure1 中没有 axes,右图的 Figure2 中有 4 个 axes。因此,我们可以将 Axes 理解为面板,而面板是覆在窗口(Figure) 上。

Axis

Axis 在中文的意思是轴。官网文档对 Axis 定义解释不清楚,让我们看得云里雾里的。如果你有留意前文的组成说明图,可以看到 X Axis 和 Y Axis 的字样。按照平常人的见识, 观察该图就能明白 Axis 是轴的意思。此外,Axis 和 Axes 以及 Figure 这三者关系,你看完下图,会恍然大悟。

2 绘制第一张图

按照剧本发展,我接下来以绘制曲线并逐步美化它为例子,一步步讲解如何绘制图形。在这过程中,我也会逐一说明各个函数的作用。

初步绘制曲线

调用np.linspace是创建一个 numpy 数组,并记作 x。x 包含了从 -2 到 6 之间等间隔的 50 个值。y1 和 y2 则分别是这 50 个值对应曲线的函数值组成的 numpy 数组。前面的操作还处于设置属性的阶段,还没有开始绘制图形。plt.figure() 函数才意味着开始执行绘图操作。最后别忘记调用show()函数将图形呈现出来。

简单修饰

我们已经绘制出两条直线,但样式比较简陋。所以我给两条曲线设置鲜艳的颜色、线条类型。同时,还给纵轴和横轴的设置上下限,增加可观性。

 

 

设置纵横轴标签

在图像中,我们不能一味地认为横轴就是 X 轴,纵轴就是 Y 轴。图形因内容数据不同,纵横轴标签往往也会不同。这也体现了给纵横轴设置标签说明的重要性。

 

 

设置精准刻度

matplotlib 画图设置的刻度是由曲线以及窗口的像素点等因素决定。这些刻度精确度无法满足需求,我们需要手动添加刻度。上图中,纵轴只显示 2 的倍数的刻度,横轴只显示 1 的倍数的刻度。我们为其添加精准刻度,纵轴变成单位间隔为 1 的刻度,横轴变成单位间隔为 0.5 的刻度。

xticks() 和 yticks() 需要传入一个列表作为参数。

该方法默认是将列表的值来设置刻度标签,如果你想重新设置刻度标签,则需要传入两个列表参数给 xticks() 和 yticks() 。第一个列表的值代表刻度,第二个列表的值代表刻度所显示的标签。

 

 

添加图例

如果需要在图的左上角添加一个图例。我们只需要在 plot() 函数里以「键 - 值」的形式增加一个参数。首先我们需要在绘制曲线的时候,增加一个 label 参数,然后再调用 plt.legend() 绘制出一个图例。plt.legend() 需要传入一个位置值。loc 的值可选如下:

 

 

注释特殊点位

有时某些数据点非常关键,需要突显出来。我们需要将改点绘制出来,即绘制散点图,再对其做注释。实现上述需求,我们要用到scatter()和annotate()函数。scatter() 是用于绘制散图,这里我们只是用其来绘制单个点。scatter() 用法,后续文章会详细对其用法做说明。annotate()则是添加标注 。

scatter() 函数必须传入两个参数 x 和 y。值得注意得是,它们的数据类型是列表。x 代表要标注点的横轴位置,y 代表要标注点的横轴位置。x 和 y 列表中下标相同的数据是对应的。例如 x 为 [3, 4],y 为 [6, 8],这表示会绘制点(3,6),(4, 8)。因此,x 和 y 长度要一样。

annotate函数同样也有两个必传参数,一个是标注内容,另一个是 xy。标注内容是一个字符串。xy 表示要在哪个位置(点)显示标注内容。xy 位置地选定。一般是在scatter() 绘制点附近,但不建议重合,这样会影响美观。

 

 

点已经被标注出来了,如果你还想给点添加注释。这需要使用text()函数。text(x,y,s) 作用是在点(x,y) 上添加文本 s。matplotlib 目前好像对中午支持不是很友好, 中文均显示为乱码。

 

 

到此为止,我们基本上完成了绘制直线所有工作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值