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. SQL 练习25

    查询同名学生名单,并统计同名人数 SELECT sname,COUNT(sname) 同名人数 from Student GROUP BY sname HAVING COUNT(sname)>1

  2. spring security 入门级全篇代码

    CustomAccessDecisionManager 类 ---------------------------------------------------------------------- ...

  3. C#简单实现表达式目录树(Expression)

    1.什么是表达式目录树 :简单的说是一种语法树,或者说是一种数据结构(Expression) 2.用Lambda声明表达式目录树: 1 2 3 4 5 Expression<Func<in ...

  4. C#多线程详解(一) Thread.Join()的详解

    bicabo   C#多线程详解(一) Thread.Join()的详解 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程 ...

  5. leaflet 动态线渲染

    可以采用leaflet插件 leaflet-ant-path ... <script src="js/leaflet-ant-path.js" type="text ...

  6. 【ArcGIS】 设置管段的流向

    在排水管网或者燃气管网中对管段进行几何网络分析,常常用到设置管段流向,一般有三种方法: 1,有流向字段的,直接进行唯一值渲染, 2,没有流向字段的需要建立几何网络, 2.1 在几何网络存在的情况下,设 ...

  7. 区间k大数训练

    问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...

  8. 客户机与服务器TCP连接状态

    客户机:

  9. Struts2之Json插件的使用

    时间:2017-1-15 02:27 --普通方式处理异步请求:    ServletActionContext.getResponse().getWriter().print("aa&qu ...

  10. Vue状态管理模式---Vuex

    1. Vuex是做什么的? 官方解释: Vuex 是一个专为Vue.js 应用程序开发的 状态管理模式 它采用 集中式存储管理 应用的所有组件的状态, 并以相应的规则保证状态以一种可预测的方式发生变化 ...