Python matplotlib底层原理解析

目录
  • 1. matplotlib 框架组成
  • 2. 脚本层(scripting)
  • 3. 美工层(artist)
  • 4. 后端层(backend)

复习回顾:
前期,我们已经学习了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底层原理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    目录 箱线图 小提琴图 想不到大家都这么喜欢用python给女朋友挑钻石,所以我又写了个续. 如果看过之前一篇用python给女朋友挑钻石的文章,那么可以直接从箱线图开始读. seaborn是matplotlib的补充包,提供了一系列高颜值的figure,并且集成了多种在线数据集,通过sns.load_dataset()进行调用,可供学习,如果网络不稳定,可下载到本地,然后在调用的时候使用把cache设为True. 其中,diamonds数据集中包含了钻石数据,总计十项,分别是[重量/克拉]ca

  • Python Matplotlib库实现画局部图

    在画图中,我们需要放大图像的某一部分,看清其变化.最近在写论文时,就遇到了这个问题,还有坐标轴加粗.控制线型和大小等要求.这些,都可以通过Python Matplotlib库实现.具体看下面的代码: import matplotlib.pyplot as plt init_np = np.array(x0_list) xopt_net_np = np.array(xopt_net) plt.figure(figsize=(8,5)) plt.subplot(311) ax = plt.gca()

  • Python 数据可视化之Matplotlib详解

    目录 使用的数据库 tips 数据库 Matplotlib 散点图 折线图 条形图 直方图 总结 在深入研究这些库之前,首先,我们需要一个数据库来绘制数据.我们将在本完整教程中使用 tips database.让我们讨论一下这个数据库的简介. 使用的数据库 tips 数据库 tips 数据库是20世纪90年代初期顾客在餐厅的两个半月的小费记录.它包含 6 列,例如 total_bill.tip.sex.smoker.day.time.size. 您可以从这里下载 tips 数据库. 例子: im

  • Python中Numpy和Matplotlib的基本使用指南

    目录 1. Jupyter Notebooks 2. NumPy 数组 3. SciPy 稀疏数组 4. Matplotlib 总结 1. Jupyter Notebooks 作为小白,我现在使用的python编辑器是Jupyter Notebook,非常的好用,推荐!!! 你可以按[Ctrl] + [Enter]快捷键或按菜单中的运行按钮来运行单元格. 在function(后面按[shift] + [tab],可以获得函数或对象的帮助. 你还可以通过执行function?获得帮助. 2. Nu

  • Python通过命令提示符安装matplotlib

    Python通过命令提示符安装matplotlib: 1.直接打开命令提示符(快捷键窗口+ r) 2.若提示安装失败(Python - 您正在使用pip版本9.0.1,但版本10.0.1可用.),输入 python -m pip install -U pip setuptools 进行升级.安装成功,则下图所示: 3.安装成功后,输入 python -m pip install matplotlib 进行自动的安装,系统会自动下载安装包.正常情况下,pip会下载关联安装包,完成最终的安装.以下为

  • Python Matplotlib初阶使用入门教程

    目录 0. 前言 1. 创建Figure的两种基本方法 1.1 第1种方法 1.2 第2种方法 2. Figure的解剖图及各种基本概念 2.1 Figure 2.2 Axes 2.3 Axis 2.4 Artist 3. 绘图函数的输入 4. 面向对象接口与pyplot接口 5. 绘图复用实用函数例 0. 前言 本文介绍Python Matplotlib库的入门求生级使用方法. 为了方便以下举例说明,我们先导入需要的几个库.以下代码在Jupyter Notebook中运行. %matplotl

  • Python Matplotlib 实现3D绘图详解

    目录 第一个三维绘图程序 3D散点图 3D等高线图 3D线框图 3D曲面图 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为实用的 3D 绘图程序包,比如 mpl_toolkits.mplot3d,通过调用该程序包一些接口可以绘制 3D散点图.3D曲面图.3D线框图等 mpl_toolkits 是 Matplotlib 的绘图工具包. 第一个三维绘图程序 下面编写第一个三维绘图程序. 首先创建一个三维绘

  • Python matplotlib底层原理解析

    目录 1. matplotlib 框架组成 2. 脚本层(scripting) 3. 美工层(artist) 4. 后端层(backend) 复习回顾: 前期,我们已经学习了matplotlib模块相关的基础知识,对 matplotlib 模块折线图.饼图.柱状图进行操作. 我们都知道matplotlib 是偏向底层用于可视化数据处理的库,我们在绘制图表的时候主要步骤主要有四大步骤: 导入 matplotlib.pplot库 使用pandas/numpy模块对数据进行整分析理 调用pyplot中

  • python sorted函数原理解析及练习

    这篇文章主要介绍了python sorted函数原理解析及练习,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前两天学习了一下socket编程,在向某大神请教问题时被嫌弃了,有一种还没学会走就想跑的感觉.大神说我现在的水平应该去做一些像是操作文件.序列号等的小练习来加深理解.下面是他给我出的小练习: 1.datas = [['sherry',19,'female'],['flora',21,'female'],['june',15,'femal

  • Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析

    网上关于工作流引擎Activiti生成表的机制大多仅限于四种策略模式,但其底层是如何实现的,相关文章还是比较少,因此,觉得撸一撸其生成表机制的底层原理. 我接触工作流引擎Activiti已有两年之久,但一直都只限于熟悉其各类API的使用,对底层的实现,则存在较大的盲区. Activiti这个开源框架在设计上,其实存在不少值得学习和思考的地方,例如,框架用到以命令模式.责任链模式.模板模式等优秀的设计模式来进行框架的设计. 故而,是值得好好研究下Activiti这个框架的底层实现. 我在工作当中现

  • Python 虚拟环境工作原理解析

    目录 简介 使用 激活脚本 工作原理 关于 sys.prefix 总结 其它 Python 的虚拟环境用来创建一个相对独立的执行环境,尤其是一些依赖的三方包,最常见的如不同项目依赖同一个但是不同版本的三方包,而且,在虚拟环境中的安装包不会影响到系统的安装包. 不过,其具体的工作原理是怎样的,这里详细介绍. 简介 几乎每个语言都包含自己的包管理工具,这是一个非常复杂的话题,而不同语言选择的实现又略有区别,都会做一些选择和取舍.而 Python 的包管理解决方案很多,例如 pip.virtualen

  • Golang底层原理解析String使用实例

    目录 引言 String底层 stringStruct结构 引言 本人因为种种原因(说来听听),放弃大学学的java,走上了golang这条路,本着干一行爱一行的情怀,做开发嘛,不能只会使用这门语言,所以打算开一个底层原理系列,深挖一下,狠狠的掌握一下这门语言 废话不多说,上货 String底层 既然研究底层,那就得全方面覆盖,必须先搞一下基础的东西,那必须直接基本数据类型走起啊, 字符串String的底层我看就很基础 string大家应该都不陌生,go中的string是所有8位字节字符串的集合

  • Python matplotlib可视化实例解析

    例1 使用Python+matplotlib绘图进行可视化,在图形中创建轴域并设置轴域的位置和大小,同时演示设置坐标轴标签和图例位置的用法. 参考代码: 运行结果: 例2 绘制正线余弦图像,然后设置图例字体.标题.位置.阴影.背景色.边框颜色.分栏.符号位置等属性. 运行效果: 例3 生成模拟数据,创建两个子图,分别绘制正弦曲线和余弦曲线,把两个子图的图例显示在一起,并显示于子图之外. 运行效果: 例4 生成模拟数据,绘制正弦曲线.余弦曲线和两个散点图,然后分别为曲线和散点图设置图例,在一个图形

  • SpringBoot整合log4j日志与HashMap的底层原理解析

    一,SpringBoot与日志 1.springboot整合log4j日志记录 1.在resources目录下面创建日志文件,并引入: 代码如下(示例): #log4j.rootLogger=CONSOLE,info,error,DEBUG log4j.rootLogger=info,error,CONSOLE,DEBUG log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=o

  • Docker基本概念和底层原理解析

    目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的说明. 1.Docker的底层原理 Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器.容器是一个运行时环境,就好比是我们前面说到的集装箱. 例如架构图中的客户端(Clien

  • Redis数据结构SortedSet的底层原理解析

    目录 概述 一些常用命令 实现 跳跃表 跳表的插入 压缩列表 概述 一些常用命令 存储:zadd key score value 获取:zrange key start end 获取:同时获取分数:zrange key start end with score 删除:zrem key value 存储的时候我们可以发现,是有一个score(分数)的,这个就是用来排序的字段. 实现 先说结论,SortedSet底层,根据配置会在不同的时候选用两种不同的数据结构zset,或ziplist进行存储:

  • Python logging模块原理解析及应用

    一.logging日志模块等级 常见log级别从高到低: CRITICAL >ERROR >WARNING >INFO >DEBUG,默认等级为WARNING,即>=WARNING级别的log才输出. 日志等级(level) 描述 CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息 ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的

随机推荐