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脚本生成Android SALT扰码的方法
Sep 18 Python
python 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
python判断链表是否有环的实例代码
Jan 31 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
Python json格式化打印实现过程解析
Jul 21 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
python实现经典排序算法的示例代码
Feb 07 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对数组排序的简单实例
2013/12/25 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
php实现每日签到功能
2018/11/29 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
JS中的==运算: [''] == false —>true
2016/07/24 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
Python命名空间详解
2014/08/18 Python
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python自定义一个异常类的方法
2019/06/27 Python
Python求解正态分布置信区间教程
2019/11/20 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
后勤主管工作职责
2013/12/07 职场文书
医学生个人求职信范文
2014/02/07 职场文书
婚礼秀策划方案
2014/05/19 职场文书
求职信结尾怎么写
2014/05/26 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
nginx内存池源码解析
2021/11/20 Servers
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs