这么详细的Python matplotlib底层原理浅析
复习回顾
前期,我们已经学习matplotlib模块相关的基础知识,对 matplotlib 模块折线图、饼图、柱状图进行操作。
这么详细的Python matplotlib 绘制图形 还不赶紧收藏_
python入门到进阶,爬虫数据分析全套资料分享讲解 (#1) ·
Python matplotlib 绘制饼图_编程简单学的博客-
超详细的Python matplotlib 绘制柱状图_编程简单学的博客
超详细的Python matplotlib 绘制直方图 赶紧收藏_
我们都知道matplotlib 是偏向底层用于可视化数据处理的库,我们在绘制图表的时候主要步骤主要有四大步骤
- 导入 matplotlib.pplot库
- 使用pandas/numpy模块对数据进行整分析理
- 调用pyplot中绘制方法绘制折线图、饼图等
- 调用pyplot.show展示出来
在 matplotlib官网上,可以看到丰富多样的图表教程
以上是我们上一期学习的内容,对于matplotlib模块来说它的底层是怎么工作的?
俗话说,学习要做到知其然,也要知其所以然,这样才能更好使用matplotlib模块相关方法。
哪我们接下来开始对matplotlib底层进行学习,Let's go~
1. matplotlib 框架组成
matplotlib 模块在众多数据可视化库中可以可以实现复杂的底层操作。像gglot、seaborn、plotnline 底层都是基于matplotlib 模块去封装不同风格的统计图表。
matplotlib 模块底层主要是由三部分组成脚本层、美工层和后端层。
- 脚本层:为用户提供可视化编程的接口
- 美工层:有大量绘制图表方法的接口
- 后端:连接硬件,处理图像元素的接口
2. 脚本层(scripting)
脚本层属于matplotlib模块中最上层,主要为用户提供可视化编程的接口,代表pyplot模块。
对于普通用户,pyplot接口可以满足大多数文本的图像和坐标的生成,传给后端进行处理。
matplotlib.pyplot接口导入时,通常是
import matplotlib.pyplot as plt
- 导入pyplot 模块并重名为plt
- pyplot 模块加载时,会对本地的配置文件进行分析
- 同时会声明默认的后端,例如声明创建Figure对象
- 将脚本深拷贝给后端后退出
pyplot 模块提调用matplotlib的方法
- 供给用面向oo调用风格,显示创建图形和轴调用其方法
- 依靠pyplot 自动创建和管理图形和轴,并使用pyplot函数进行绘图
用户只需调用pyplot模块相关的方法,就可以绘制漂亮的图表啦
from matplotlib import pyplotimport pandaspyplot.rcParams["font.sans-serif"]=['SimHei'] pyplot.rcParams["axes.unicode_minus"]=Falsepyplot.bar([1,2,3,4,5,6],[45,20,19,56,35,69])pyplot.title("data analyze") pyplot.xlabel("元素 a") pyplot.ylabel("元素 b")pyplot.show()
3. 美工层(artist)
在美工层位于matplotlib中间层,主要进行数据相关的绘制工作,绘制图表中的标题、直线、刻度等都是artist对象的实例。
artist 层特点
- 脚本层创建的Figure对象是Artist对象实例
- Artist的基类是matplotlib.artist.Artist,共享所有Artist属性包括从美工系统到画布坐标系统变化等
- 提供处理用户交互动作的接口
matplotlib 图表对象
我们可以通过如下matplotlibe图表中可以看到一张图表由多个对象组合而成的。
matplotlib 图表对象说明
对象 说明 Figure 图形,弹出框口即是figure axes 子图 title 标题 legend 图例 Major tick 大标尺刻度 Minor tick 小标尺刻度 Line 线型图 axis label 坐标指标说明 Marker 数据标准说明 Artist 对象说明
ArtIst 对象包含Figure、Axes、Axis对象,是它们的基类,其Artist对象都全部位于后端提供的canvas画布上。
Figure
- 一个图表窗口即是一个figure对象
- figure对象中至少要包含一个Axes对象子图
- figure对象中可以包含title、label等Artist对象
- figure对象中包含的不可见对象canvas。绘制图像时会进行调用
Axes
- axes 是子图对象,子图对象指的是x和y轴.
- axes 常用有set_xlabel()、set_ylabel()设置x和y轴坐标名字
Axis
- axis 是代表数据轴的对象,主要用于表示刻度位置和显示数值
- axis 包含用于控制刻度位置的Locator和显示刻度Formatter两个子对象
Artist对象层级结构图如下
4. 后端层(backend)
后端层主要是matplotlib 模块底层实现,主要实现了三方面的抽象接口 4.
FigureCanvas:对Artist对象绘制提供画布功能进行封装
matplotlib 模块底层是基于硬的用户画面,FigureCaves接口主要完成前期初始化工作
- 将自身嵌入到原生的QT视觉窗口(QtGui.QMainWindow)
- 将matplotlib的绘制命令Render转换到canvas上(QtGui.QPainter)
- 将原生Qt事件转成matplotlib的Event接口,Event接口接收到信息后进行处理
Renderer: 相当于画笔,执行绘制动作
Render 主要提供硬件底层的绘图接口,能对Artist绘制命令进行执行。
- Render 接口最初源于GDK的Drawable接口,后来转换成独立后端的原生绘图命令。
- matplotlib 是支持C++模块库基于像素点核心渲染器agg
- 可以进行2d反锯齿渲染、PNG图片生成
Event: 处理用户键盘和鼠标输入事件
Event 框架是将key-press-event或者mouse-motion-event等UI事件映射到键盘或者鼠标事件类中。
- 用户可以连接事件,使用函数进行回调
- 图形与数据交互
总结
本期,对matplotlib模块底层实现进行深入地认识和学习。在matplotlib模块中底层是基于C++模板库Agg来渲染图片效果的,同时提高脚本层pyplot让非专业的人也能轻松处理数据展示数据。
以上是本期内容,欢迎大佬们点赞评论,下期见~
这么详细的Python matplotlib底层原理浅析相关推荐
- 超详细的Python matplotlib 绘制动态图
复习回顾 在matplotlib模块中我们前面学习绘制如折线.柱状.散点.直方图等静态图形.我们都知道在matplotlib模块主要有三层脚本层为用户提供快捷的绘制图形方法,美工层接收到脚本层的命令后 ...
- 这么详细的Python matplotlib 绘制图形 还不赶紧收藏
前言 我们前面对matplotlib模块底层结构学习,对其pyplot类(脚本层)类提供的绘制折线图.柱状图.饼图.直方图等统计图表的相关方法,列举往期文章如下. 超详细的Python matplot ...
- redis单线程原理___Redis为何那么快-----底层原理浅析
redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...
- 超详细的Python matplotlib 绘制柱状图
复习回顾 Python 为数据展示提供了大量优秀的功能包,其中 matplotlib 模块可以方便绘制制作折线图.柱状图.散点图等高质量的数据包. 关于 matplotlib 模块,我们前期已经对ma ...
- 超详细的Python matplotlib 绘制直方图 赶紧收藏
前言 经过前面对 matplotlib 模块从底层架构.基本绘制步骤等学习,我们已经学习了折线图.柱状图的绘制方法. 在分析数据的时候,我们会根据数据的特点来选择对应图表来展示,需要表示质量这一概念, ...
- python对象底层原理_Python字符串对象实现原理详解
在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dic ...
- Docker 底层原理浅析
作者:vitovzhong,腾讯 TEG 应用开发工程师 容器的实质是进程,与宿主机上的其他进程是共用一个内核,但与直接在宿主机执行的进程不同,容器进程运行在属于自己的独立的命名空间.命名空间隔离了进 ...
- Python字符串底层原理
文章目录 什么是字符串 字符串的编码 常见的编码格式 字符串的解码和编码方式 字符串的声明和内存分布 字符串的直接声明 --> 内存分布 字符串时不可变数据类型 --> 内存分布 字符串的 ...
- Redis为何那么快-----底层原理浅析
Redis的快速很多人都知道是因为基于内存,但这只是一方面,其实redis在底层是一套很完善的多路复用事件处理机制来保证执行的高效的 线程模型 redis内部使用文件事件处理器file event h ...
最新文章
- Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...
- omnicppcomplete - a Vim plugin [转载]
- 使用pagination分页插件实现Ajax动态分页
- UVa 10635 (LIS+二分) Prince and Princess
- 吃货联盟点餐java面向对象_使用面向对象思想编写吃货联盟
- 轻量应用服务器支持带宽套餐升级至流量包套餐流程说明
- 《C语言及程序设计》实践参考——阿姆斯特朗数
- 华为交换机eth口作用_华为交换机口如何绑定端口号
- python列表(list)和元组(tuple)之间的转换
- 进程管理:fork与exec函数及fork子进程和父进程
- QT 5 初学1 多窗口切分-续
- mac小白怎么下载网页视频?
- 基于MATLAB霍夫变换的复杂情况下车道线检测
- linux下固态硬盘ssd优化
- Kubernetes:基于命令行终端UI的管理工具 K9s
- 月入过万的steam搬砖项目教程拆解,看这一篇就够了
- 百万奖补!2022年湖北省双创战略团队申报条件、材料和支持奖补
- class Complex
- 视频剪辑配音怎么弄?三分钟轻松搞定短视频配音!
- IoT黑板报:腾讯推出世界最强人脸识别 准确率99.8%
热门文章
- R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签
- R语言ggplot2可视化在图像中添加脚注信息(footnote)实战:自定义脚注信息的位置、对齐形式、图的脚注、整个网格的脚注
- R把天数据按照不同时间粒度聚合数据(Aggregate)
- Cross-Validation交叉验证是什么?详解及实施
- mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?
- 三代测序的基本原理、组装方法和应用场景
- javascript 六种数据类型
- 一种PacBio测序数据组装得到的基因组序列的纠错方法
- php 类似微信下拉菜单,微信小程序实现下拉框(附代码)
- 服务器连接超时不响应怎么回事,勇者斗恶龙x服务器没有响应连接超时解决方法...