复习回顾

前期,我们已经学习​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底层原理浅析相关推荐

  1. 超详细的Python matplotlib 绘制动态图

    复习回顾 在matplotlib模块中我们前面学习绘制如折线.柱状.散点.直方图等静态图形.我们都知道在matplotlib模块主要有三层脚本层为用户提供快捷的绘制图形方法,美工层接收到脚本层的命令后 ...

  2. 这么详细的Python matplotlib 绘制图形 还不赶紧收藏

    前言 我们前面对matplotlib模块底层结构学习,对其pyplot类(脚本层)类提供的绘制折线图.柱状图.饼图.直方图等统计图表的相关方法,列举往期文章如下. 超详细的Python matplot ...

  3. redis单线程原理___Redis为何那么快-----底层原理浅析

    redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...

  4. 超详细的Python matplotlib 绘制柱状图

    复习回顾 Python 为数据展示提供了大量优秀的功能包,其中 matplotlib 模块可以方便绘制制作折线图.柱状图.散点图等高质量的数据包. 关于 matplotlib 模块,我们前期已经对ma ...

  5. 超详细的Python matplotlib 绘制直方图 赶紧收藏

    前言 经过前面对 matplotlib 模块从底层架构.基本绘制步骤等学习,我们已经学习了折线图.柱状图的绘制方法. 在分析数据的时候,我们会根据数据的特点来选择对应图表来展示,需要表示质量这一概念, ...

  6. python对象底层原理_Python字符串对象实现原理详解

    在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dic ...

  7. Docker 底层原理浅析

    作者:vitovzhong,腾讯 TEG 应用开发工程师 容器的实质是进程,与宿主机上的其他进程是共用一个内核,但与直接在宿主机执行的进程不同,容器进程运行在属于自己的独立的命名空间.命名空间隔离了进 ...

  8. Python字符串底层原理

    文章目录 什么是字符串 字符串的编码 常见的编码格式 字符串的解码和编码方式 字符串的声明和内存分布 字符串的直接声明 --> 内存分布 字符串时不可变数据类型 --> 内存分布 字符串的 ...

  9. Redis为何那么快-----底层原理浅析

    Redis的快速很多人都知道是因为基于内存,但这只是一方面,其实redis在底层是一套很完善的多路复用事件处理机制来保证执行的高效的 线程模型 redis内部使用文件事件处理器file event h ...

最新文章

  1. Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...
  2. omnicppcomplete - a Vim plugin [转载]
  3. 使用pagination分页插件实现Ajax动态分页
  4. UVa 10635 (LIS+二分) Prince and Princess
  5. 吃货联盟点餐java面向对象_使用面向对象思想编写吃货联盟
  6. 轻量应用服务器支持带宽套餐升级至流量包套餐流程说明
  7. 《C语言及程序设计》实践参考——阿姆斯特朗数
  8. 华为交换机eth口作用_华为交换机口如何绑定端口号
  9. python列表(list)和元组(tuple)之间的转换
  10. 进程管理:fork与exec函数及fork子进程和父进程
  11. QT 5 初学1 多窗口切分-续
  12. mac小白怎么下载网页视频?
  13. 基于MATLAB霍夫变换的复杂情况下车道线检测
  14. linux下固态硬盘ssd优化
  15. Kubernetes:基于命令行终端UI的管理工具 K9s
  16. 月入过万的steam搬砖项目教程拆解,看这一篇就够了
  17. 百万奖补!2022年湖北省双创战略团队申报条件、材料和支持奖补
  18. class Complex
  19. 视频剪辑配音怎么弄?三分钟轻松搞定短视频配音!
  20. IoT黑板报:腾讯推出世界最强人脸识别 准确率99.8%

热门文章

  1. R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签
  2. R语言ggplot2可视化在图像中添加脚注信息(footnote)实战:自定义脚注信息的位置、对齐形式、图的脚注、整个网格的脚注
  3. R把天数据按照不同时间粒度聚合数据(Aggregate)
  4. Cross-Validation交叉验证是什么?详解及实施
  5. mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?
  6. 三代测序的基本原理、组装方法和应用场景
  7. javascript 六种数据类型
  8. 一种PacBio测序数据组装得到的基因组序列的纠错方法
  9. php 类似微信下拉菜单,微信小程序实现下拉框(附代码)
  10. 服务器连接超时不响应怎么回事,勇者斗恶龙x服务器没有响应连接超时解决方法...