安防峰会
雷锋网AI研习社 AI投研邦 活动 专题 爱搞机
业界人工智能 学术 开发者 智能驾驶 新智驾TV AI+金融科技未来医疗网络安全智慧城市 智慧安防 智慧教育 智慧交通 智慧社区 智慧零售 智慧政务 机器人行业云智能硬件物联网GAIR
人工智能正文
0
Python Matplotlib 绘图使用指南 (附代码)
本文作者:雷锋字幕组 2018-05-22 11:03
导语:matplotlib 是一个基于 Python 的 2D 绘图库
雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 Matplotlib Plotting Guide, 作者为 Prince Grover。
翻译 | 李振 于志鹏 整理 | 凡江
Python Matplotlib 绘图使用指南 (附代码)
大多数人不会花大量时间去学 matplotlib 库,仍然可以实现绘图需求,因为已经有人在 stackoverflow、github 等开源平台上提供了绝大多数画图问题的解决方案。我们通常会使用 google 来完成绘图需求。至少我是这样。
那学 matplotlib 库有什么用?答案是:可以节约搜索时间。掌握 matplotlib 的速查表并了解其基本接口,根据个性需求从众多资源中编辑我们的绘图,从长期来看会节约很多的时间。
大部分内容取自以下 2 个链接,建议也去阅读一下。
https://realpython.com/python-matplotlib-guide/#why-can-matplotlib-be-confusing
https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Python_Matplotlib_Cheat_Sheet.pdf
Python Matplotlib 绘图使用指南 (附代码)
matplotlib 是一个基于 Python 的 2D 绘图库,其可以在跨平台的在各种硬拷贝格式和交互式环境中绘制出高图形。
一个有趣的现象。为什么引用库总采用 import matplotlib.pyplot as plt 的方式呢?
因为使用例如 pylab import * 或者 %pylab 是一个非常不好的方式,matplotlib 官方不建议这样使用,具体原因如下:
由于历史原因,from pylab import * 仍然存在,但是强烈建议不要这样使用。这样做会遮蔽 Python 的内置函数进而占用命名空间,导致难以追踪的 bugs。想要实现零输入获得 IPython 集成,推荐使用 %matplotlib 命令。来源:https://matplotlib.org/users/shell.html#using-matplotlib-in-a-python-shell
使用 matplotlib 绘制不同类型的图像是很容易的,有很多文档和教程。最重要的是,了解最佳的绘图方式。如何使用 axes,subplots 等。这篇文章主要针对这些问题。
1.内联绘图和 % matplotlib
%matplotlib 命令可以在当前的 Notebook 中启用绘图。这个命令提供一个可选参数,指定使用哪个 matplotlib 后端。绝大多数情况下,Notebook 中都是使用 inline 后台,它可以在 Notebook 中嵌入绘图。另一个选项是 qt 后台,它在侧窗口打中打开 Matplotlib 交互 UI 。
Matlibplot 提供了多种绘图 UI ,可进行如下分类 :
弹出窗口和交互界面: %matplotlib qt 和 %matplot tk
非交互式内联绘图: %matplotlib inline
交互式内联绘图: %matplotlib notebook-->别用这个,它会让开关变得困难。
2.理解 matplotlib 对象结构
pyplot 是一个 matplotlib 面向对象的函数接口。
plt.gca()
它返回当前 plot() 关联的轴
Python Matplotlib 绘图使用指南 (附代码)
如果不使用 plt.close(),则会显示出空的图形。因为在开始时使用了 inline 命令。
Python Matplotlib 绘图使用指南 (附代码)
axis_id 仍然是相同的,但是当我们移动到另一个 Notebook 块时,plt.gca() 会发生变化。
Setter 和 Getter
Getter 和 Setter 方法用于捕获当前或任意 axies 以及对其进行修改。我们可能需要修改标题、颜色、图列、字体等。有两种方法:
1. 使用 fig.axes[i] 指定要抓取的 axes,使用 setter 的 getter 对 axies 对象进行调用。在上面的例子中,只有一个 axes,所以我们调用 axes[0]。
2. 我们可以直接使用 plt.bla() 调用当前 axis(其中,bla 可以是 title(),legend(),xlabel()等)。这是 matlibplot 面向对象的一种函数。这个函数让修改当前的 axes 变得容易。比 1 的方法更常用。
Python Matplotlib 绘图使用指南 (附代码)
当我们使用 axes[i] 时,我们可以调用任何之前的代码块中的任何 axes 对象,但是调用 plt.bla(),会在每个代码块中创建新的 axes 对象,并只调用当前对象。因此,上面例子中,只在 plt.title() 被调用时,才创建新 plt 对象。
重要观察:我们通常在当前 axis 对象上调用 plt.bla(),这种语法使得每个代码块中的 axis 对象都是新创建的。但是通过调用 fig.axes[0],我们也可以从任何代码块中处理之前的 axes 对象。
这是 stateless(object oriented) 方法,并可以自定义,当图像变得复杂时,这样做很方便。
所以,我建议是使用 fig,ax = plt.subplots(_) 先解压 axes 和 figure,并给它们分配给一个新的变量。然后,可以对这些变量使用 Getter 和 Setter 方法进行绘图中的更改。此外,这使得我们能够在多个 axes 上做工作,而不是只在一个当前 axes 上。pyplot 使用 1 次创建子图,然后使用 OO 方法。
结论:从现在开始,我使用 plt.subpots() 来完成不同的绘图。(如果有人认为这个观点是错误的,请纠正我)
3.matplotlib 图像剖析
Python Matplotlib 绘图使用指南 (附代码)
来自: https://matplotlib.org/faq/usage_faq.html
4.绘图的基本例子
如何作图的基本例子,涵盖面向对象绘图的各个方面。请仔细阅读。
Python Matplotlib 绘图使用指南 (附代码)
Python Matplotlib 绘图使用指南 (附代码)
总结上面的例子:
我们创建 1 行和 2 列的图形。即,1 行和 2 列中的 2 个 axes 对象。
我们分别自定义 ax1 和 ax2。可以看到,我们可以将 Y-ticks 移动到右边的第二图形中。
5.二维网格的绘制
subplot2grid
需要做什么?
观察下面的绘图格式。
Python Matplotlib 绘图使用指南 (附代码)
思路是把上面的图形考虑成为 2x4 网格。然后将多个网格分配给单个图以容纳所需的图形。
Python Matplotlib 绘图使用指南 (附代码)
Python Matplotlib 绘图使用指南 (附代码)
重点:
我们可以使用 subplot2grid 定制我们的绘图布局。
我们可以用 plt.figure() 创建无 axes 对象的图形,然后手动添加 axes 对象。
我们可以使用 fig.suptitle() 来设置整个图形的总标题。
6.颜色,颜色条,RGB 数组和颜色图谱
我们已经介绍了 ax.plot(),ax.scatter(),ax.bar() 和 ax.hist() 等基本图形操作,另一个更常用的函数是 ax.imshow(),它用来显示彩色图或图像/RGB 数组。
Python Matplotlib 绘图使用指南 (附代码)
Python Matplotlib 绘图使用指南 (附代码)
Python Matplotlib 绘图使用指南 (附代码)
7.线条样式和线条宽度
改变线条宽度、颜色或风格。
Python Matplotlib 绘图使用指南 (附代码)
Python Matplotlib 绘图使用指南 (附代码)
8.基本的数据分布
EDA 过程中的必要操作。
Python Matplotlib 绘图使用指南 (附代码)
9.二维数组的等高线图和颜色网格图
热像图(颜色网格图)和等高线图在很多情况下都有助于可视化 2D 数据。
Python Matplotlib 绘图使用指南 (附代码)
10.图像的调整、修改边缘坐标和标度
最后调整细节,让绘图变得更好看。
11.标度的限制和自动调整
Python Matplotlib 绘图使用指南 (附代码)
Python Matplotlib 绘图使用指南 (附代码)
需要注意的事情:
填充(padding)自动设置 X 轴或 Y 轴网格标度
我们可以使用 xlim,ylim 设置 x,y 的刻度限制
12.技巧
Python Matplotlib 绘图使用指南 (附代码)
Python Matplotlib 绘图使用指南 (附代码)
13.轴线
Python Matplotlib 绘图使用指南 (附代码)
14.结束
博客原址: https://www.kaggle.com/grroverpr/matplotlib-plotting-guide/notebook
Python Matplotlib 绘图使用指南 (附代码)
雷锋网(公众号:雷锋网)雷锋网
雷锋网原创文章,未经授权禁止转载。详情见转载须知。
32人收藏 分享:
文章点评:
我有话要说……
表情 同步到新浪微博 提交
雷锋字幕组
知情人士
入组微信leiphonefansub
发私信
当月热门文章
贝叶斯神经网络(系列)第一篇
重磅 | AI 第一高校 CMU 的「神经网络 NLP」课,中英字幕独家上线!
使用卡尔曼滤波器和路标实现机器人定位
一文带你读懂 SegNet(语义分割)
AutoML:无人驾驶机器学习模型设计自动化
最新文章
前腾讯 AI Lab 主任张潼加入港科大,牵手创新工场成立联合实验室
2019 年阿贝尔数学奖出炉,Karen Uhlenbeck 成首位女性获奖者
计算机视觉(及卷积神经网络)简史
涂鸦秒变真实风景,NVIDIA GauGAN让你也可以拥有天才之笔!
github 项目推荐:深度学习500问
表现比 BERT 更胜一筹?微软用于学习通用语言嵌入的 MT-DNN 即将开源
热门搜索
谷歌深度学习iPhone移动支付阿里云福特槽点云存储通用今日头条穿戴式设备
热门关键字
热门标签人工智能 机器人机器学习深度学习金融科技未来医疗智能驾驶自动驾驶计算机视觉激光雷达图像识别智能音箱区块链智能投顾医学影像物联网IoTCV微信小程序平台微信小程序在哪CES 2017CES2016年最值得购买的智能硬件2016 互联网小程序微信朋友圈抢票软件智能手机智能家居智能手环智能机器人智能电视360智能硬件智能摄像机智能硬件产品智能硬件发展智能硬件创业黑客白帽子大数据云计算新能源汽车无人驾驶无人机大疆小米无人机特斯拉VR游戏VR电影VR视频VR眼镜VR购物AR直播扫地机器人医疗机器人工业机器人类人机器人聊天机器人微信机器人微信小程序移动支付支付宝P2P区块链比特币风控高盛人脸识别指纹识别黑科技谷歌地图谷歌IBM微软乐视百度三星s8腾讯三星Note8 小米MIX小米Note华为小米阿里巴巴苹果MacBook ProiPhoneFacebookGAIRIROS双创周云栖大会先打智能硬件公司智能硬件QQ红包支付宝红包敬业福hololens无人驾驶ios 塔防wazewatson health固定翼无人机双百计划eatsa最大色情uber 客服中国移动无限流量信息图表2016深圳双创周定位appmeta2 ar更多
联系我们关于我们加入我们意见反馈投稿申请专栏作者
Copyright © 2011-2019 www.leiphone.com 雷锋网-读懂智能&未来 All Rights Reserved 粤ICP备11095991号-1 ICP证粤B2-20150332 0daybank
文章评论