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的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
Python decorator拦截器代码实例解析
Apr 04 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
Django限制API访问频率常用方法解析
Oct 12 Python
详解如何使用Pytest进行自动化测试
Jan 14 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
关于时间计算的结总
2006/12/06 PHP
PHP中动态显示签名和ip原理
2007/03/28 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python中几个比较常见的名词解释
2015/07/04 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
pandas通过索引进行排序的示例
2018/11/16 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
python类共享变量操作
2020/09/03 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
工厂保安员岗位职责
2014/01/31 职场文书
驾驶员培训方案
2014/05/01 职场文书
企业理念标语
2014/06/09 职场文书
小学中等生评语
2014/12/29 职场文书
喋血孤城观后感
2015/06/08 职场文书
导游词之无锡梅园
2019/11/28 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Golang全局变量加锁的问题解决
2021/05/08 Golang
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript