Python matplotlib底层原理解析

 更新时间:2021年12月01日 09:16:09   作者:盆友圈的小可爱  
这篇文章主要介绍了Python matplotlib底层原理,下面文章围绕Python matplotlib底层原理的相关资料展开详细内容,具有一定的参考价值,需要的朋友可以参考下

复习回顾:
前期,我们已经学习了matplotlib模块相关的基础知识,对 matplotlib 模块折线图、饼图、柱状图进行操作。

我们都知道matplotlib 是偏向底层用于可视化数据处理的库,我们在绘制图表的时候主要步骤主要有四大步骤:

  • 导入 matplotlib.pplot
  • 使用pandas/numpy模块对数据进行整分析理
  • 调用pyplot中绘制方法绘制折线图、饼图等
  • 调用pyplot.show展示出来

matplotlib官网上,可以看到丰富多样的图表教程

 

以上是我们上一期学习的内容,对于matplotlib模块来说它的底层是怎么工作的?

俗话说,学习要做到知其然,也要知其所以然,这样才能更好使用matplotlib模块相关方法。

1. matplotlib 框架组成

matplotlib 模块在众多数据可视化库中可以可以实现复杂的底层操作。像gglotseabornplotnline 底层都是基于matplotlib 模块去封装不同风格的统计图表。

matplotlib 模块底层主要是由三部分组成脚本层、美工层和后端层。

  • 脚本层:为用户提供可视化编程的接口
  • 美工层:有大量绘制图表方法的接口
  • 后端:连接硬件,处理图像元素的接口

PS: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 pyplot

import pandas

pyplot.rcParams["font.sans-serif"]=['SimHei']
pyplot.rcParams["axes.unicode_minus"]=False

pyplot.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 对象包含FigureAxesAxis对象,是它们的基类,其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底层原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • django rest framework 实现用户登录认证详解

    django rest framework 实现用户登录认证详解

    这篇文章主要介绍了django rest framework 实现用户登录认证详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python+Pygame实战之诗词填空游戏的实现

    Python+Pygame实战之诗词填空游戏的实现

    成语接龙大家都玩过,但诗词填空大家玩过吗?把成语接龙变成填空题。难度可上涨了不止一个档次呢!本文就来用Python和Pygame实现诗词填空游戏,需要的可以参考一下
    2022-12-12
  • Python 文件和输入输出小结

    Python 文件和输入输出小结

    Python 是面向对象编程语言,文件也是一种类,下面简单介绍下,方便需要的朋友
    2013-10-10
  • Pycharm设置界面全黑的方法

    Pycharm设置界面全黑的方法

    今天小编就为大家分享一篇Pycharm设置界面全黑的方法,具有很好的参考价值。希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 浅谈django 重载str 方法

    浅谈django 重载str 方法

    这篇文章主要介绍了浅谈django 重载str 方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • pytorch之torch.flatten()和torch.nn.Flatten()的用法

    pytorch之torch.flatten()和torch.nn.Flatten()的用法

    这篇文章主要介绍了pytorch之torch.flatten()和torch.nn.Flatten()的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)

    在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)

    这篇文章主要介绍了在PyCharm中遇到pip安装失败问题及解决方案(pip失效时的解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python发送邮件测试报告操作实例详解

    Python发送邮件测试报告操作实例详解

    这篇文章主要介绍了Python发送邮件测试报告操作,结合实例形式较为详细的分析了Python邮件发送相关模块使用及操作注意事项,需要的朋友可以参考下
    2018-12-12
  • 浅析Python的对象拷贝和内存布局

    浅析Python的对象拷贝和内存布局

    这篇文章主要为大家详细介绍了Python中的对象拷贝和内存布局的相关知识,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2022-12-12
  • Python JSON模块的使用详情

    Python JSON模块的使用详情

    这篇文章主要介绍了Python JSON模块的使用详情,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写下面文章围绕Python JSON模块的相关资料展开内容,需要的小伙伴可以参考一下,希望 对你有所帮助
    2021-12-12

最新评论