手把手教你用Matplotlib进行数据可视化

大数据DT

共 4263字,需浏览 9分钟

 · 2020-12-16


导读:Matplotlib是建立在NumPy数组上的一个多平台数据可视化库。在2002年,约翰·亨特(John Hunter)提出Matplotlib,最初的构思是设计为IPython的一个补丁,以便能够从命令行启用交互式MATLAB样式绘图。


近几年,更新、更炫酷的工具(例如,R语言中的ggplot和ggvis)层出不穷,最终取代了Matplotlib,可是Matplotlib仍然是一个经过良好测试的、非常重要的跨平台图形引擎。


作者:阿迪蒂亚·夏尔马(Aditya Sharma)、维什韦什·拉维·什里马利(Vishwesh Ravi Shrimali)、迈克尔·贝耶勒(Michael Beyeler)
来源:大数据DT(ID:hzdashuju)





01 导入Matplotlib


如果你安装了完整的Python Anaconda,那么你已经安装了Matplotlib,可以开始了。否则,你可能要访问官网获取安装说明。


http://matplotlib.org


就像我们用缩写np来表示NumPy一样,我们也会用一些标准的缩写来表示Matplotlib导入:


import matplotlib as mpl


import matplotlib.pyplot as plt


plt是我们最常用的一个接口。



02 生成一个简单的图形


言归正传,让我们创建第一个图形。


假设我们要绘制正弦函数sin(x)的一个简单线图。我们希望函数求x轴(0≤x≤10)上的所有值。我们将使用NumPy的linspace函数在x轴上创建一个线性空间,x值从0到10,共100个样本点:


import numpy as np


x = np.linspace(010100)


我们可以使用NumPy的sin函数求sin函数的所有x值,并通过调用plt的plot函数可视化结果:


plt.plot(x, np.sin(x))


你亲自试过了吗?发生什么了?有什么发现吗?


问题是,这取决于你在何处运行这个脚本,你可能什么都看不到。以下是可以考虑的可能性:


1. 从.py脚本绘图


如果你正从一个脚本运行matplotlib,那么你只需要调用plt,如下所示:


plt.show()


调用后,图形就会显示出来!


2. 从IPython shell绘图


这实际上是以交互方式运行matplotlib的最便捷的方式之一。要显示绘图,你需要在启动IPython之后,调用%matplotlib魔术命令:


%matplotlib
Using matplotlib backend: Qt5Agg


import matplotlib.pyplot as plt


然后,所有图都会自动显示出来,不必每次都调用plt.show()。


3. 从Jupyter Notebook绘图


如果你从基于浏览器的Jupyter Notebook上查看这段代码,你需要使用同样的%matplotlib魔术命令。可是,你还可以选择将图形直接嵌入notebook中,这有两种可能的结果:


  • %matplotlib notebook将生成的交互式图嵌入notebook中。

  • %matplotlib inline将生成的静态图嵌入notebook中。


我们通常会选择内联选项:


%matplotlib inline


现在,让我们再试一次:


plt.plot(x, np.sin(x))


上述命令给出的输出如图2-4所示。


▲图2-4 应用内联选项生成的图


稍后,如果你想保存图表,可以直接从IPython或Jupyter Notebook的选项中保存:


plt.savefig('figures/02.03-sine.png')


只要保证使用所支持的文件后缀即可,例如.jpg、.png、.tif、.svg、.eps或者.pdf。


在导入matplotlib之后,运行plt.style.use(style_name),你可以更改绘图的样式。在plt.style.available中列出了所有可用的样式。例如,试试plt.style.use('fivethirtyeight')、plt.style.use('ggplot')或者plt.style.use('seaborn-dark')。为了增加乐趣,可以运行plt.xkcd(),再尝试绘制其他内容。



03 可视化外部数据集的数据


作为本文的最后一个测试,让我们可视化一些来自外部数据集的数据,例如scikit-learn的digits数据集。


具体来说,我们将需要3个可视化工具:


  • 用于实际数据的scikit-learn

  • 用于数据处理的NumPy

  • Matplotlib


首先,让我们导入所有这些可视化工具:


import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
%matplotlib inline


第一步是实际加载数据:


digits = datasets.load_digits()


如果我们没有记错的话,digits应该有2个不同的字段:一个是data字段,包含实际的图像数据;另一个是target字段,包含图像标签。


与其相信我们的记忆,不如让我们研究一下digits对象。这通过输入字段名称、添加句点、再按下Tab键—digits.来实现。这会显示出digits对象还包含了一些其他字段,例如一个名为images的字段。images和data这2个字段似乎只是形状不同:


print(digits.data.shape)
print(digits.images.shape)


输出结果:


(1797, 64)
(1797, 8, 8)


在这两个例子中,第一维都对应于数据集中的图像数。但是data将所有像素排列在一个大的向量中,而images则保留了每个图像的8×8空间排列。


因此,如果我们想绘制单张图像,images字段可能更合适。首先,使用NumPy的数组切割,从数据集中抓取一张图像:


img = digits.images[0, :, :]


这里,我们说想要抓取长为1797项的数组中的第一行,以及所有对应的8×8=64个像素。然后,我们可以使用plt的imshow函数绘制图像:


plt.imshow(img, cmap='gray')
plt.savefig('figures/02.04-digit0.png')


上述命令给出的输出如图2-5所示。请注意,图像是模糊的,因为我们将该图像调整到了更大的尺寸。原始图像的大小只有8×8。


▲图2-5 生成单张图像的示例结果


此外,我们还可以使用cmap参数指定一个彩图。在默认情况下,Matplotlib使用MATLAB的默认彩图jet。可是,对于灰度图像,gray彩图更有意义。


最后,我们可以利用plt的subplot函数绘制一组数字样本。subplot函数与在MATLAB中一样,我们指定行数、列数以及当前子图的索引(从1开始)。我们将使用一个for循环遍历数据集中的前10个图像,每个图像都有自己的子图:


plt.figure(figsize=(144))

for image_index in range(10):
    # images are 0-indexed, subplots are 1-indexed
    subplot_index = image_index + 1
    plt.subplot(25, subplot_index)
    plt.imshow(digits.images[image_index, :, :], cmap='gray')


生成的输出如图2-6所示。


▲图2-6 生成包含10个数字的一组子图


对于各种数据集,另一个很好的资源是本书作者迈克尔·贝耶勒的母校加州大学欧文分校的机器学习资源库:


http://archive.ics.uci.edu/ml/index.php


关于作者:阿迪蒂亚·夏尔马(Aditya Sharma),罗伯特·博世(Robert Bosch)公司的一名高级工程师,致力于解决真实世界的自动计算机视觉问题。曾获得罗伯特·博世公司2019年人工智能编程马拉松的首名。

维什韦什·拉维·什里马利(Vishwesh Ravi Shrimali),于2018年毕业于彼拉尼博拉理工学院(BITS Pilani)机械工程专业。此后一直在BigVision LLC从事深度学习和计算机视觉方面的工作,还参与了官方OpenCV课程的创建。

迈克尔·贝耶勒(Michael Beyeler),是华盛顿大学神经工程和数据科学的博士后研究员,致力于仿生视觉的计算模型研究,以为盲人植入人工视网膜(仿生眼睛),改善盲人的感知体验。他的工作属于神经科学、计算机工程、计算机视觉和机器学习的交叉领域。


本文摘编自机器学习:使用OpenCV、Python和scikit-learn进行智能图像处理(原书第2版)》,经出版方授权发布。


延伸阅读机器学习

点击上图了解及购买

转载请联系微信:DoctorData


推荐语:保姆级OpenCV入门实战手册——“蝴蝶书”全新升级!通过具体的编程实践案例,介绍最新OpenCV 4版本所提供的大量新特性和平台改进。通过书中提供的用例代码,你可以快速熟悉并掌握机器学习领域的相关知识,掌握使用OpenCV 4构建智能计算机视觉应用程序所需要的机器学习技能。



划重点?


干货直达?


更多精彩?

在公众号对话框输入以下关键词
查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 | 讲明白 | 神操作
大数据 | 云计算 | 数据库 | Python | 可视化
AI | 人工智能 | 机器学习 | 深度学习 | NLP
5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都完成了这个神操作
?


浏览 2
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报