1. 核心原理

使用matplotlib绘图的原理,主要就是理解figure(画布)、axes(坐标系)、axis(坐标轴)三者之间的关系。

下面这幅图更详细:

以“美院学生张三写生画画”为例,来说明这三者之间的关系。

首先,张三想要画画,是不是需要在画板上面准备一张画布。对比到matplotlib中,就相当于初始化了一张figure(画布),我们画的任何图形,都是在这张figure(画布)上操作的。

接着,张三需要给figure(画布)分配不同的区域,指定哪一块儿究竟该画什么。对比到matplotlib中,就是需要指定axes(坐标系),每一个axes(坐标系)相当于一张画布上的一块区域。一张画布上,可以分配不同区域,也就是说,一张画布,可以指定多个axes(坐标系)。

最后,张三就是在分配好的不同区域上进行图形绘制了,在一张画布上,画的最多的应该就是2 D图,也可以画3 D图,如图所示,张三在区域一画了一个小狗,在区域二画了一个小猫,在区域三画了一个光头强。对比到matplotlib中,我们在axes1中画了一个条形图,在axes2中画了一个饼图,在axes3中画了一个折线图。当是2 D图时,都会有一个X轴和一个Y轴;当是3 D图时,都会有一个X轴、一个Y轴和一个Z轴,这个轴就是我们所说的“坐标轴axis”。

matplotlib绘图

一个figure(画布)上,可以有多个区域axes(坐标系),我们在每个坐标系上绘图,也就是说每个axes(坐标系)中,都有一个axis(坐标轴)。

特别注意:在matplotlib中,figure画布axes坐标轴并不能显示的看见,我们能够看到的就是一个axis坐标轴的各种图形。

2. 基本使用

2.1 创建figure(画布)的两种方式

2.1.1 隐式创建figure对象

当第一次执行plt.xxx()画图代码时,系统会去判断是否已经有了figure对象,如果没有,系统会自动创建一个figure对象,并且在这个figure之上,自动创建一个axes坐标系。

【注意】默认创建一个figure对象,一个axes坐标系

也就是说,如果我们不设置figure对象,那么一个figure对象上,只能有一个axes坐标系,即我们只能绘制一个图形。

隐式创建figure对象存在的问题

  • 优势:如果只是绘制一个小图形,那么直接使用plt.xxx()的方式,会自动帮我们创建一个figure对象和一个axes坐标系,这个图形最终就是绘制在这个axes坐标系之上的。

  • 劣势:如果我们想要在一个figure对象上,绘制多个图形,那么我们就必须拿到每个个axes对象,然后调用每个位置上的axes对象,就可以在每个对应位置的坐标系上,进行绘图,如下图所示。注意:如果figure对象是被默认创建的,那么我们根本拿不到axes对象。因此,需要我们显示创建figure对象。

2.1.2 显示创建figure对象

以后的文章会详细讲述布局设置

# 手动创建一个figure对象
figure = plt.figure()
# 获取每个位置的axes对象
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)

如图所示:

Example

import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Qt5Agg') figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)
axes1.plot([1,3,5,7],[4,9,6,8])
axes2.plot([1,2,4,5],[8,4,6,2])
figure.show()

结果如下:

2.2 完整的绘图步骤

  1. 导库

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    mpl.use('Qt5Agg') # 现在matplotlib改了,只能这样,不然无法显示图片
  2. 创建figure画布对象

    如果绘制一个简单的小图形,我们可以不设置figure对象,使用默认创建的figure对象,当然我们也可以显示创建figure对象。如果一张figure画布上,需要绘制多个图形。那么就必须显示的创建figure对象,然后得到每个位置上的axes对象,进行对应位置上的图形绘制

  3. 根据figure对象进行布局设置

    后面详说

  4. 获取对应位置子图的axes坐标系对象

    figure = plt.figure()
    axes1 = figure.add_subplot(2,1,1)
    axes2 = figure.add_subplot(2,1,2)
  5. 调用axes对象,进行对应位置的图形绘制

    这一步,是我们传入数据,进行绘图的一步。对于图形的一些细节设置,都可以在这一步进行。

  6. 显示图形

    plt.show()figure.show()如果在PyCharm中绘图的话,必须要加这句代码,才能显示。如果在notebook中进行绘图,可以不用加这句代码,而是自动显示。

『Python』matplotlib初识的更多相关文章

  1. 『Python』matplotlib的imshow用法

    热力图是一种数据的图形化表示,具体而言,就是将二维数组中的元素用颜色表示.热力图之所以非常有用,是因为它能够从整体视角上展示数据,更确切的说是数值型数据. 使用imshow()函数可以非常容易地制作热 ...

  2. 『Python』matplotlib实现GUI效果

    1. 类RadioButtons的使用方法 类似单选框 import numpy as np import matplotlib.pyplot as plt import matplotlib as ...

  3. 『Python』matplotlib实现动画效果

    一般而言,在绘制复杂动画时,主要借助模块animation来完成 import numpy as np import matplotlib.pyplot as plt import matplotli ...

  4. 『Python』matplotlib坐标轴应用

    1. 设置坐标轴的位置和展示形式 import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.use ...

  5. 『Python』matplotlib共享绘图区域坐标轴

    1. 共享单一绘图区域的坐标轴 有时候,我们想将多张图形放在同一个绘图区域,不想在每个绘图区域只绘制一幅图形.这时候,就可以借助共享坐标轴的方法实现在一个绘图区域绘制多幅图形的目的. import n ...

  6. 『Python』matplotlib划分画布的主要函数

    1. subplot() 绘制网格区域中几何形状相同的子区布局 函数签名有两种: subplot(numRows, numCols, plotNum) subplot(CRN) 都是整数,意思是将画布 ...

  7. 『Python』matplotlib常用图表

    这里简要介绍几种统计图形的绘制方法,其他更多图形可以去matplotlib找examples魔改 1. 柱状图 柱状图主要是应用在定性数据的可视化场景中,或是离散数据类型的分布展示.例如,一个本科班级 ...

  8. 『Python』matplotlib常用函数

    1. 绘制图表组成元素的主要函数 1.1 plot()--展现量的变化趋势 import numpy as np import matplotlib.pyplot as plt import matp ...

  9. 『Python』__getattr__()特殊方法

    self的认识 & __getattr__()特殊方法 将字典调用方式改为通过属性查询的一个小class, class Dict(dict): def __init__(self, **kw) ...

随机推荐

  1. noip22

    T1 考试的时候打的特殊性质分,然而暴力竟然写假了. 正解: 显然是个贪心,要最大化 \(a_{\min}\times b_{\min}\),肯定是要删掉若干个 \(a\) 最小,\(b\) 最小的矩 ...

  2. 深入浅出Mybatis系列(十)---延迟加载

    一.延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 延迟加载:先 ...

  3. SpringCloud分布式配置中心Config

    统一管理所有配置. 1.微服务下的分布式配置中心 简介:讲解什么是配置中心及使用前后的好处 什么是配置中心: 一句话:统一管理配置, 快速切换各个环境的配置 相关产品: 百度的disconf 地址:h ...

  4. 何时覆盖hashCode()和equals()方法

    The theory (for the language lawyers and the mathematically inclined): equals() (javadoc) must defin ...

  5. Spring第一课:依赖注入DI(二)

    DI Dependency Injection ,依赖注入 is a :是一个,继承. has a:有一个,成员变量,依赖. class B { private A a;   //B类依赖A类 } 依 ...

  6. 微信小程序学习笔记二 列表渲染 + 条件渲染

    1. 列表渲染 1.1 wx:for 在组件上使用wx:for控制属性绑定一个数组, 即可使用数组中各项的数据重复渲染该组件 默认数组的当前项的下标变量名默认为 index, 数组当前项的变量名默认为 ...

  7. 【CSS复合选择器、元素显示模式、背景】前端小抄(3) - Pink老师自学笔记

    [CSS复合选择器.元素显示模式.背景]前端小抄(3) 本学习笔记是个人对 Pink 老师课程的总结归纳,转载请注明出处! 一.CSS的复合选择器 1.1 什么是复合选择器 在 CSS 中,可以根据选 ...

  8. MySQL高可用主从复制新增slave

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 基础环境 二 新增slave2方案 2.1 方案1:-复制主库 2.2 方案2 ...

  9. CPU内部结构域寄存器

    CPU内部结构域寄存器   64位和32位系统区别: 寄存器是CPU内部最基本的存储单元. CPU对外是通过总线(地址.控制.数据)来和外部设备交互的,总线的宽度是8位,同时CPU的寄存器也是8位,那 ...

  10. Java中Scanner用法总结

    最近在做OJ类问题的时候,经常由于Scanner的使用造成一些细节问题导致程序不通过(最惨的就是网易笔试,由于sc死循环了也没发现,导致AC代码也不能通过...),因此对Scanner进行了一些总结整 ...