Matplotlib数据可视化!

2021-01-20 09:53:51 浏览数 (1)

↑↑↑关注后"星标"Datawhale

每日干货 & 每月组队学习,不错过

Datawhale干货

作者:橡鱼,Datawhale优秀学习者

数据可视化,就是指将结构或非结构数据转换成适当的可视化图表,然后将隐藏在数据中的信息直接展现于人们面前。相比传统的用表格或文档展现数据的方式,可视化能将数据以更加直观的方式展现出来,使数据更加客观、更具说服力。

数据可视化已经被用于工作科研的方方面面,如工作报表、科研论文等,成为了不可或缺的基础技能。现在,就让我们一起来学习下数据可视化的基础知识。

一、 常用可视化工具

Python有许多用于数据可视化的库,例如常见的有seaborn、pyecharts(echarts的Python版本)、ggplot(移植于R语言的ggplot2,但是有些差别,Python有其他方法可以调用R语言的ggplot2)、bokeh、Plotly(同时支持Python和R语言)等等,这些大多是基于Matplotlib进行开发封装的。

Matplotlib是一个Python 2D绘图库(使用Matplotlib发布的mpl_toolkits库可以画3D图形 ),能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的图表。

Matplotlib 是 Python 最著名的绘图库,它提供了一整套和 MATLAB 相似的命令 API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,使用在Python脚本,Python和IPython Shell、Jupyter notebook,Web应用程序服务器和各种图形用户界面工具包等上面。

二、 Matplotlib 初识

1. 例子

Matplotlib的图像是画在figure(如windows,jupyter窗体)上的,每一个figure又包含了一个或多个axes(一个可以指定坐标系的子区域)。最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。

声明:以下使用的是IPython Shell

代码语言:javascript复制
%matplotlib  # 在IPython Shell调用Matplotlib绘图接口,需要加这行代码
import matplotlib.pyplot as plt
import numpy as np
 
fig, ax= plt.subplots()  # 创建一个包含一个axes的figure
 # 绘图
ax.plot([1, 2, 3, 4], [1, 4, 3, 2])  

这里有一个小知识点,很小很小,但是对于刚刚接触数据可视化的新手可能容易弄混。ax.plot([1, 2, 3, 4], [1, 4, 3, 2]) 这句代码里面第一个参数是数据集里各个数据点的X值的集合,第二个参数数据集里各个数据点的Y值的集合。所以这里输入的参数值并不是数学上常见的成对坐标点如(x1,y1)、(x2,y2)、...、(xn,yn)的格式,而是 (x1,x2,...,xn)和(y1,y2,...,yn)

2. 例子

和MATLAB命令类似,你还可以通过一种更简单的方式绘制图像,matplotlib.pyplot 方法能够直接在当前axes上绘制图像,如果用户未指定axes,matplotlib会帮你自动创建一个。所以上面的例子也可以简化为以下这一行代码。

代码语言:javascript复制
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])  

这里有个trick(坑)需要注意一下。如上所示,在IPython或jupyter notebook的同一个代码框中,如果不对其声明画在哪个图上(可以使用 plot() 函数里面的 ax 参数进行指定),就会自动画到最后一个创建的图上(即最后一个Figure对象的最后一个Axes子图里)。

代码语言:javascript复制
plt.figure()  # 创建一个新的Figure对象
plt.plot([1, 2, 3, 4], [1, 4, 2, 3]) 

更多例子可以在Matplotlib官网查看: https://matplotlib.org/gallery/index.html

三、 Matplotlib 全貌

现在我们来深入看一下figure的组成。通过一张figure解剖图,我们可以看到一个完整的matplotlib图像通常会包括以下四个层级,这些层级也被称为容器(container),下一节会详细介绍。在matplotlib的世界中,我们将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合。

  • Figure:顶层级,用来容纳所有绘图元素。
  • Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成。
  • Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素。
  • Tick:axis的下属层级,用来处理所有和刻度有关的元素。

四、 Matplotlib 绘图接口

matplotlib提供了两种最常用的绘图接口

  1. 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)。
  2. 依赖pyplot自动创建figure和axes,并绘图。

使用第一种绘图接口,是这样的:

代码语言:javascript复制
x = np.linspace(0, 2, 100)

fig, ax = plt.subplots()  
ax.plot(x, x, label='linear')  
ax.plot(x, x**2, label='quadratic')  
ax.plot(x, x**3, label='cubic')  
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 
ax.set_title("Simple Plot")  
ax.legend() 

而如果采用第二种绘图接口,绘制同样的图,代码是这样的: plt.figure() IPython 里面需要加这行,jupyter notebook则不用,原因见<2.2 例子2>。

代码语言:javascript复制
x = np.linspace(0, 2, 100)

plt.figure()  # IPython里面需要加这行,jupyter notebook则不用
plt.plot(x, x, label='linear') 
plt.plot(x, x**2, label='quadratic')  
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

五、 讨论

在工作或学习中通常何时会用到数据可视化,希望通过可视化达到什么目的?

个人经验:

  • ① 在机器学习中,数据可视化经常用于各种算法模型拟合效果的直观展示

例子1:线性回归模型的拟合效果。

例子2:机器学习聚类算法的K-MEANS算法和DBSCAN算法对数据集划分类别的效果对比。 下图来源:K-MEANS可视化网站https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

下图来源:DBSCAN算法可视化网站https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

  • ② 在数据分析和数据挖掘中经常用来检查数据的分布,以及窥探数据集内在的规律或事件发展的规律。以下是个人在数据分析和数据挖掘中使用到数据可视化的2个案例。 例1:使用黄氏曲线评估零售店促销活动效果 例2:Kaggle项目:Predict Future Sales(商品未来销量预测)

参考连接:(数据可视化开源教程)

https://github.com/datawhalechina/fantastic-matplotlib

“整理不易,点赞三连

0 人点赞