网络编程
位置:首页>> 网络编程>> Python编程>> Python matplotlib底层原理解析

Python matplotlib底层原理解析

作者:盆友圈的小可爱  发布时间:2021-05-11 07:05:29 

标签:Python,matplotlib,底层,原理
目录
  • 1. matplotlib 框架组成

  • 2. 脚本层(scripting)

  • 3. 美工层(artist)

  • 4. 后端层(backend)

Python matplotlib底层原理解析

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

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

  • 导入 matplotlib.pplot

  • 使用pandas/numpy模块对数据进行整分析理

  • 调用pyplot中绘制方法绘制折线图、饼图等

  • 调用pyplot.show展示出来

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

 

Python matplotlib底层原理解析

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

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

1. matplotlib 框架组成

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

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

  • 脚本层:为用户提供可视化编程的接口

  • 美工层:有大量绘制图表方法的接口

  • 后端:连接硬件,处理图像元素的接口

Python 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()

Python matplotlib底层原理解析

3. 美工层(artist)

在美工层位于matplotlib中间层,主要进行数据相关的绘制工作,绘制图表中的标题、直线、刻度等都是artist对象的实例。

artist 层特点

  • 脚本层创建的Figure对象是Artist对象实例

  • Artist的基类是matplotlib.artist.Artist,共享所有Artist属性包括从美工系统到画布坐标系统变化等

  • 提供处理用户交互动作的接口

matplotlib 图表对象

我们可以通过如下matplotlibe图表中可以看到一张图表由多个对象组合而成的。

Python matplotlib底层原理解析

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对象层级结构图如下

Python matplotlib底层原理解析

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让非专业的人也能轻松处理数据展示数据。

来源:https://juejin.cn/post/7029297425575575560

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com