python Matplotlib数据可视化(1):简单入门


Posted in Python onSeptember 30, 2020

1 matplot入门指南

matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求。但功能丰富从另一方面来说也意味着概念、方法、参数繁多,让许多新手望而却步。

据我了解,大部分人在对matplotlib接触不深时都是边画图边百度,诸如这类的问题,我想大家都似曾相识:Python如何画散点图,matplotlib怎么将坐标轴标签旋转45度,怎么设置图例字体大小等等。无论针对哪一个问题,往往都有多种解决方法,搜索引擎这时候当然会很热情得将各种五花八门、看似合理、各不相同的解决方案推给我们,对于新手往往就迷失在这些纷杂的答案中,然后觉得matplotlib好复杂。matplotlib设计原则就是追求对每一个图表细节的完全控制,所以matplotlib源码中各种对象很多,甚至各对象间相互应用,错综复杂,对同一个对象的设置经常可以调用不同的方法来实现,这是matplotlib入门难的原因之一。

对于matplotlib入门阶段学习曲线陡峭,我认为还有一个更加重要的原因。无论是在各种出版书籍还是网络博客中,都少有资料对matplotlib进行深入的系统介绍,大多浅尝辄止。这些流于表层的资料对于如何用matplotlib作图没有进行深入的分析,大多只介绍如何调用pyplot模块中的方法进行作图。pyplot是matplotlib中提供的一个顶层模块,提供许多方法实现了快速、简便作图,几行代码就可以完成一幅图的创作,但是,这种方法作图却让新手对matplotlib图形的认识变得粗浅,也很难实现对图形的更加精细控制,底层定制能力有限,最终让新手对matplotlib咬牙切齿。这种方法就想吃快餐,快速方便,但是吃多了难免营养不良。

面对matplotlib入门阶段的这两个问题,怎么办呢?

matplotlib其实提供了两类接口实现作图。第一类基于状态的接口,就是上文中提到的pyplot进行作图,这类接口对matplotlib中更加底层的对象进行封装,以仿MATLAB作图风格的方式让作图更加简单方便。至于为什么叫基于状态,我的观点是pyplot所有作图动作都是默认在当前出于激活的元素上进行,要切换到其他元素作图,就要使另一元素激活。第二类接口是基于对象的接口,这种方法是使用买你想对象的方法来作图,认为图形中每一个元素都是一种对象,通过调用更加底层对象来实现作图。这种方法代码量更多,但是让用户对matplotlib图形的构成有了更深的认识,也让用户对图形的每一个元素有更强的掌控力。

所以,在使用matplotlib作图过程中,本文建议在学习阶段多使用基于对象的方法进行作图,只要掌握了基于对象的方法作图,后面使用pyplot作图自然水到渠成。本文后续大部分介绍也是基于这一种方法。

2 安装与导入

  • 安装

matplotlib的安装与Python中其他第三方库安装方法无异

pip install -i https://pypi.douban.com/simple matplotlib
  • 导入

进行导入操作时通常不会直接将整个matplotlib包导入,而是导入matplotlib包中最为常用的pyplot模块,一般的,我们习惯将pyplot导入时起一个简称plt。

import matplotlib.pyplot as plt

3 图的构成

在使用matplotlib进行绘图之前,理解matplotlib图表构成是非常有必要的。matplotlib图表有三个非常重要的概念:figure、axes、axies。 三者之间的关系构成了matplotlib图表的整体布局,如下图所示。

python Matplotlib数据可视化(1):简单入门

在matplotlib图表中,至少有一个figure,figure可以理解为一张画布,画布上面可以画多个axes,这里的axes我理解为坐标系,每个坐标系可以有多个axis,也就是有多条坐标轴。

下图是在matplotlib官方文档中展示的一张图片,进一步的很清晰展示了matplotlib图表布局上的组件构成:

python Matplotlib数据可视化(1):简单入门

上图中,蓝色部分文本是各组件的名称,请牢记各组件的名称,方便在对各组件进行设置是调用函数,因为组件的名称与函数名是相似的。其实,在matplotlib中,在figure中的所有组件,包括图一中的axes、axies甚至是figure和图中出现的所有组件都称为artist,因为这些组件均继承于一个名为Artist的父类。根据所在位置和作用,我们可以将matplotlib所有artist可以划分到三个层次:

(1)figure层:画布,这是最低层的容器,用于容纳axes。
(2)axes层:坐标系,也成为轴域,第二层容器,用于容纳axis。
(3)axis层:坐标轴,也包含坐标轴上更加细微的组件。
使用matplotlib进行作图时,按照这个层次结构顺序进行创建完成作图。接下来,我们分别对figure、axes、axis进行展开介绍。

3 总结

本篇博客主要是为matplotlib如何入门以及matplotlib宏观层面的容器布局做了一番介绍,希望这番介绍能够让各位读者对matplotlib有一个更加正确、深入的认识。

最后,还是想说一句,matplotlib很强,只不过目前无论是网络上还是市场上的matplotlib资料大多属于快餐类别,吃多了就容易营养不良,造成后继无力。当然,pyplot只是快餐,却不是毒药,因为pyplot中确实提供了很多强大的方法实习县对图形的管理。本文强烈建议(官方文档中也提出了),如果只是简单得对数据进行展示,那么当然可以使用pyplot完成,但是如果需要更加精细的对图片进行设置,那么建议使用pyplot中的方法来创建matplotlib图形的容器对象,因为pyplot创建容器对象可以方便得纳入matplotlib序列中进行管理,有了容器对象之后,后续的画图,请勿通过再pyplot进行,最好是通过容器对象进行操作。

入门学习阶段,无论如何,请走基于对象作图这条路!!!

在下一篇博客中,我将对这三层容器对象开始,循序渐进地介绍基于对象的作图方式。

作者:奥辰

微信号:chb1137796095

Github:https://github.com/ChenHuabin321

欢迎加V交流,共同学习,共同进步!

以上就是python Matplotlib数据可视化(1):简单入门的详细内容,更多关于python Matplotlib数据可视化的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python设计模式之代理模式实例
Apr 26 Python
python开发之函数定义实例分析
Nov 12 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python如何实现数据的线性拟合
Jul 19 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
python-视频分帧&多帧合成视频实例
Dec 10 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
Python max函数中key的用法及原理解析
Jun 26 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 #Python
python 生成器需注意的小问题
Sep 29 #Python
python 两种方法删除空文件夹
Sep 29 #Python
如何使用python写截屏小工具
Sep 29 #Python
python如何调用百度识图api
Sep 29 #Python
Python 串口通信的实现
Sep 29 #Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 #Python
You might like
php 数组的一个悲剧?
2011/05/11 PHP
解析php中memcache的应用
2013/06/18 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
深入浅析Python字符编码
2015/11/12 Python
TensorFlow实现创建分类器
2018/02/06 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
解析python的局部变量和全局变量
2019/08/15 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
Python解析json代码实例解析
2019/11/25 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
python 模拟登陆163邮箱
2020/12/15 Python
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
文明生主要事迹
2014/05/25 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
观看信仰心得体会
2014/09/04 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫