Python实操:手把手教你用Matplotlib把数据画出来
导读:获取数据之后,而不知道如何查看数据,用途还是有限的。幸好,我们有Matplotlib!
Matplotlib 是基于 NumPy 数组构建的多平台数据可视化库。它是John Hunter 在2002年构想的,原本的设计是给 IPython 打补丁,让命令行中也可以有交互式的 MATLAB 风格的画图工具。
在近些年,已经出现了更新更好的工具最终替代了 Matplotlib(比如 R 语言中的ggplot和ggvis), 但 Matplotlib 依旧是一个经过良好测试的、跨平台的图形引擎。
作者:迈克尔·贝耶勒(Michael Beyeler)
如需转载请联系大数据(ID:hzdashuju)
01 引入 Matplotlib
如果已安装Anaconda Python版本,就已经安装好了可以使用的 Matplotlib。否则,可能要访问官网并从中获取安装说明:
http://matplotlib.org
正如使用np作为 NumPy 的缩写,我们将使用一些标准的缩写来表示 Matplotlib 的引入:
In [1]: import matplotlib as mplIn [2]: import matplotlib.pyplot as pltimport matplotlib as mplIn [2]: import matplotlib.pyplot as plt
在本书中,plt接口会被频繁使用。
02 生成一个简单的绘图
让我们创建第一个绘图。
假设想要画出正弦函数sin(x)的线性图。得到函数在x坐标轴上0≤x<10内所有点的值。我们将使用 NumPy 中的 linspace 函数来在x坐标轴上创建一个从0到10的线性空间,以及100个采样点:
In [3]: import numpy as npIn [4]: x = np.linspace(0, 10, 100)import numpy as npIn [4]: x = np.linspace(0, 10, 100)
可以使用 NumPy 中的sin函数得到所有x点的值,并通过调用plt中的plot函数把结果画出来:
In [5]: plt.plot(x, np.sin(x))
你亲自尝试了吗?发生了什么吗?有没有什么东西出现?
实际情况是,取决于你在哪里运行脚本,可能无法看到任何东西。有下面几种可能性:
1. 从.py脚本中绘图
如果从一个脚本中运行 Matplotlib,需要加上下面的这行调用:
plt.show()
在脚本末尾调用这个函数,你的绘图就会出现!
2. 从 IPython shell 中绘图
这实际上是交互式地执行Matplotlib最方便的方式。为了让绘图出现,需要在启动 IPython 后使用所谓的%matplotlib魔法命令。
In [1]: %matplotlibUsing matplotlib backend: TkAggIn [2]: import matplotlib.pyplot as pltUsing matplotlib backend: TkAggIn [2]: import matplotlib.pyplot as plt
接下来,无须每次调用plt.show()函数,所有的绘图将会自动出现。
3. 从 Jupyter Notebook 中绘图
如果你是从基于浏览器的 Jupyter Notebook 中看这段代码,需要使用同样的%matplotlib魔法命令。然而,也可以直接在notebook中嵌入图形,这会有两种输出选项:
在本书中,将会使用inline选项:
In [6]: %matplotlib inline
现在再次尝试一下:
In [7]: plt.plot(x, np.sin(x))Out[7]: [<matplotlib.lines.Line2D at 0x7f3aac426eb8>]Out[7]: [<matplotlib.lines.Line2D at 0x7f3aac426eb8>]
上面的命令会得到下面的绘图输出结果:
▲使用 Matplotlib 绘制正弦函数图像
如果想要把绘图保存下来留作以后使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
In [8]: plt.savefig('figures/02.03-sine.png')'figures/02.03-sine.png')
仅需要确保你使用了支持的文件后缀,比如.jpg、.png、.tif、.svg、.eps或者.pdf。
Tips:可以在引入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中的数字数据集。
为此,需要三个可视化工具:
那么开始引入这些包吧:
In [1]: import numpy as np... from sklearn import datasets... import matplotlib.pyplot as plt... % matplotlib inlineimport numpy as np... from sklearn import datasets... import matplotlib.pyplot as plt... % matplotlib inline
第一步是载入实际数据:
In [2]: digits = datasets.load_digits()
如果没记错的话,digits应该有两个不同的数据域:data域包含了真正的图像数据,target域包含了图像的标签。相对于相信我们的记忆,我们还是应该对digits稍加探索。输入它的名字,添加一个点号,然后按Tab键:digits.<TAB>,这个操作将向我们展示digits也包含了一些其他的域,比如一个名为images的域。images和data这两个域,似乎简单从形状上就可以区分。
In [3]: print(digits.data.shape)... print(digits.images.shape)Out[3]: (1797, 64)... (1797, 8, 8)... print(digits.images.shape)Out[3]: (1797, 64)... (1797, 8, 8)
两种情况中,第一维对应的都是数据集中的图像数量。然而,data中所有像素都在一个大的向量中排列,而images保留了各个图像8×8的空间排列。
因此,如果想要绘制出一副单独的图像,使用images将更加合适。首先,使用NumPy的数组切片从数据集中获取一幅图像:
In [4]: img = digits.images[0, :, :]0, :, :]
这里是从1797个元素的数组中获取了它的第一行数据,这行数据对应的是8×8=64个像素。下面就可以使用plt中的imshow函数来绘制这幅图像:
In [5]: plt.imshow(img, cmap='gray')Out[5]: <matplotlib.image.AxesImage at 0x7efcd27f30f0>'gray')Out[5]: <matplotlib.image.AxesImage at 0x7efcd27f30f0>
上面的命令得到下面的输出:
▲数字数据集中的一个图像样例
此外,这里也使用cmap参数指定了一个颜色映射。默认情况下,Matplotlib 使用MATLAB默认的颜色映射jet。然而,在灰度图像的情况下,gray颜色映射更有效。
最后,可以使用plt的subplot函数绘制全部数字的样例。subplot函数与MATLAB中的函数一样,需要指定行数、列数以及当前的子绘图索引(从1开始计算)。我们将使用for 循环在数据集中迭代出前十张图像,每张图像都分配到一个单独的子绘图中。
In [6]: for image_index in range(10):... # 图像按0开始索引,子绘图按1开始索引... subplot_index = image_index + 1... plt.subplot(2, 5, subplot_index)... plt.imshow(digits.images[image_index, :, :], cmap='gray')for image_index in range(10):... # 图像按0开始索引,子绘图按1开始索引... subplot_index = image_index + 1... plt.subplot(2, 5, subplot_index)... plt.imshow(digits.images[image_index, :, :], cmap='gray')
这会得到下面的输出结果:
▲数字数据集中的十幅样例图像
Tips:另一个拥有各种数据集资源的是我的母校——加利福尼亚大学欧文分校的机器学习仓库:
http://archive.ics.uci.edu/ml
关于作者:Michael Beyeler,华盛顿大学神经工程和数据科学专业的博士后,主攻仿生视觉计算模型,用以为盲人植入人工视网膜(仿生眼睛),改善盲人的视觉体验。 他的工作属于神经科学、计算机工程、计算机视觉和机器学习的交叉领域。同时他也是多个开源项目的积极贡献者。
本文摘编自《机器学习:使用OpenCV和Python进行智能图像处理》,经出版方授权发布。
延伸阅读《机器学习》
点击上图了解及购买
转载请联系微信:DoctorData
推荐语:OpenCV是一个综合了经典和先进计算机视觉、机器学习算法的开源库。通过与Python Anaconda版本结合,你就可以获取你所需要的所有开源计算库。 本书首先介绍分类和回归等统计学习的基本概念,然后详细讲解决策树、支持向量机和贝叶斯网络等算法,以及如何把它们与其他OpenCV函数结合。
据统计,99%的大咖都完成了这个神操作
▼
更多精彩
在公众号后台对话框输入以下关键词
查看更多优质内容!
PPT | 报告 | 读书 | 书单 | 干货
大数据 | 揭秘 | Python | 可视化
AI | 人工智能 | 5G | 区块链
机器学习 | 深度学习 | 神经网络
1024 | 段子 | 数学 | 高考
猜你想看
有关华为、5G、芯片和操作系统,这些书你读过几本?
什么是数据?数据科学家需要掌握哪些技能?终于有人讲明白了
你为什么选择Python?4000名用户提到了这些原因
回顾计算机产业发展的4个阶段:美国企业统治全球市场了吗?
Q: 你在用哪些可视化工具?
欢迎留言与大家分享
觉得不错,请把这篇文章分享给你的朋友
转载 / 投稿请联系:baiyu@hzbook.com
更多精彩,请在后台点击“历史文章”查看
点击阅读原文,了解更多
Python实操:手把手教你用Matplotlib把数据画出来相关推荐
- 手把手教你用Matplotlib进行数据可视化
导读:Matplotlib是建立在NumPy数组上的一个多平台数据可视化库.在2002年,约翰·亨特(John Hunter)提出Matplotlib,最初的构思是设计为IPython的一个补丁,以便 ...
- 5分钟技术实操: 手把手教你开发以太坊钱包
编辑 | kou 本文节选自<区块链项目开发指南>,阅读时长大约10分钟. 创建钱包服务 钱包服务将允许用户生成独一无二的种子,显示地址和相关余额,最后将允许用户发送以太币给其他账户.所有 ...
- 真正零基础Python入门:手把手教你从变量和赋值语句学起
导读:在本文中,你会学到如何处理数字.定义与使用变量和常量,以及编写使用这些数据类型执行实际任务的简单程序. 作者:凯·霍斯特曼(Cay Horstmann),兰斯·尼塞斯(Rance Necaise ...
- python学习之手把手教你将图片变成黑白或彩色字符画(骚操作)
文章目录 前言 一.字符画的实现原理 二.黑白字符画实现代码 三.彩色字符画生成 代码实现: 总结 前言 字符画这个话题,似乎早在贴吧时代就已经被玩烂了.在百度图片随便一搜索,就能够看到非常多.然后在 ...
- matplotlib绘图_手把手教你使用Matplotlib绘图实战
点击上方"早起Python",关注并星标公众号 和我一起玩Python 大家好,昨天我们讲解了如何使用Matplotlib官方文档来绘制并调整我们想要的图,那么今天将使用真实数据来 ...
- 【Python 实操】labelImg标注的xml格式转换为yolo的txt文件
[Python 实操]labelImg标注的xml格式转换为yolo的txt文件 背景 YOLO家族开枝散叶(尤其是YOLOv5)的广泛应用就涉及到图像的标注与文件格式转换,常用的标注工具有 Labe ...
- PSM倾向得分匹配法【python实操篇】
前言 大家好,我是顾先生,PSM倾向性得分匹配法的Python代码实操终于来啦! 对于PSM原理不太熟悉的同学可以看看前一篇文章:PSM倾向得分匹配法[上篇:理论篇] 目前网上PSM实操的相关文章 ...
- 小马同学 学习python实操的第一天
学习python实操的第一天 第一个实操案例 任务1:向文件输出"一段属于你自己的话" ##方法一 fp= open('d:/test.txt','w') ##open('文件存储 ...
- Python—实操小实验之人机PK游戏(终极版本—应用类与对象的知识点应用)
Python-实操小实验之人机PK游戏(终极版本-应用类与对象的知识点应用) 人机PK游戏所需要的基础元素如下: ①要有玩家.敌人.生命值.攻击力,还要有计分: ②要可以互相进行攻击,攻击之后生命值要 ...
最新文章
- 5 个用 Python 编写 web 爬虫的方法
- 港科大开源 | 基于事件的双目视觉里程计
- 机器学习系列18:核函数
- js6的未来(二)函数增强
- LeetCode 555. 分割连接字符串
- account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...
- CheckStyle使用手册(一)
- gzip解压str python_有哪些你不知道的Python小工具
- 计算机字长与下列哪项指标密切相关,组成原理与汇编语言-中国大学mooc-题库零氪...
- 燕十八的php教材学完能找工作吗,燕十八的布尔教育怎么样? - php完全自学手册...
- 自制 kazzo 烧录器
- windows10安装双系统后,删除linux,开机进入grub怎么办
- 微信“小程序”来了,短期不可高估,长期不可低估
- 8c SQL手册 三
- Unity粒子系统参数解析(一)
- 用让新海诚本人惊讶的 AI 模型制作属于你的动漫视频
- Oracle常见sql语句练习及答案(经典题目,方便练习)
- MongoDB 存放图片
- 一般可行性研究报告的主要内容和要求
- Sangria:PLONK + Folding
热门文章
- 前端笔记-vue cli为web添加底纹
- Qt文档阅读笔记-Qt插件DECLARE_INTERFACE METADATA INTERFACES官方解析及实例
- C++ opengl 天空盒的创建
- web网页期末作业-在线教育
- HTML期末网页作业-仿QQ官网QQ注册网页
- unef螺纹_硬料怎么车螺纹?一文了解螺纹的分类及其刀具选择
- 定义python函数时如果没有return_定义 Python 函数时,如果函数中没有 return 语句,则默认返回空值 None 。_学小易找答案...
- php隐藏做上传图片,php做图片上传功能
- 爬虫分页爬取猎聘_想把python爬虫了解透彻吗?一起盘它 ! !
- 向后转动作要领_跆拳道腿法之转身侧踢动作要领