使用Matplotlib对分析结果可视化时,比较各类分析结果是常见的场景。
在这类场景之下,将多个分析结果绘制在一张图上,可以帮助用户方便地组合和分析多个数据集,提高数据可视化的效率和准确性。

本篇介绍Matplotlib绘制子图的常用方式和技巧。

1. 添加子图的方式

添加子图主要有两种方式,
一种是函数式风格:(也就是上一篇画布中介绍的方式)

import numpy as np

import matplotlib
import matplotlib.pyplot as plt %matplotlib inline x = np.array(range(0, 8)) fig = plt.figure(figsize=[6,4])
fig.add_subplot(211) # 2行1列的第一个
y = np.random.randint(1, 100, 8)
plt.plot(x, y) fig.add_subplot(212) # 2行1列的第二个
y = np.random.randint(1, 100, 8)
plt.plot(x, y)

另一种是面向对象风格:(使用 Axes 对象)

x = np.array(range(0, 8))

fig, ax = plt.subplots(1, 2)  # 设置子图1行2列
y = np.random.randint(1, 100, 8)
ax[0].plot(x, y) y = np.random.randint(1, 100, 8)
ax[1].plot(x, y)

上面设置好子图的布局之后,添加子图的顺序是从上到下,从左到右。

2. 子图的布局

子图的布局是按照行列设置的,设置之后,相应的位置可以添加子图。

x = np.array(range(0, 8))
rows, cols = 2, 2 # 2行2列,4个子图
fig, ax = plt.subplots(rows, cols) for i in range(rows):
for j in range(cols):
y = np.random.randint(1, 100, 8)
ax[i, j].plot(x, y) # i,j定位子图的位置


子图按照网格布局时,我们看到上面4个子图的Y轴刻度不一样,这样不利于比较。

x = np.array(range(0, 8))
rows, cols = 2, 2 # 2行2列,4个子图
fig, ax = plt.subplots(rows, cols, sharey='all') for i in range(rows):
for j in range(cols):
y = np.random.randint(1, 100, 8)
ax[i, j].plot(x, y) # i,j定位子图的位置


设置 sharey='all'之后,Y轴刻度保持一致,这样比较曲线才有意义。
上面的示例中 X轴刻度是一致的,如果不一致,可以用 sharex 属性来设置。

3. 复杂的布局

3.1. 不规则的网格

除了规则的网格布局,还可以通过 GridSpec 设置不规则的网格。
比如:

rows, cols = 3, 3
grid = plt.GridSpec(rows, cols) plt.subplot(grid[0, :2])
plt.subplot(grid[0, 2]) plt.subplot(grid[1, 0])
plt.subplot(grid[1, 1:]) plt.subplot(grid[2, :])


上例中设置了3行3列的网格,但是不是每个图形占用几个网格是可以调整的。

3.2. 嵌套图形

除了网格,还可以通过相对定位的方式来绘制多个子图。

fig = plt.figure()

fig.add_axes([0.1, 0.1, 1, 1])
fig.add_axes([0.3, 0.3, 0.3, 0.3])
fig.add_axes([0.7, 0.6, 0.3, 0.2])


上面按相对位置添加子图的函数 add_axes的参数是一个4元列表
这个列表4个元素的含义:

  1. 第一个元素表示子图左下角距离画布左边的距离占画布总宽度的比例
  2. 第二个元素表示子图左下角距离画布底边的距离占画布总高度的比例
  3. 第三个元素表示子图宽度占画布总宽度的比例
  4. 第三个元素表示子图高度占画布总高度的比例

注意,这里的4个值都是比例

4. 总结回顾

Matplotlib 中的每个子图可以有自己的标签、大小、位置和样式,可以方便地组合成一个复杂的图形。
我们一般在下列场景中使用子图:

  1. 数据可视化:将多个数据集在同一张图中显示,进行对比和分析。
  2. 图表组合:将多个图表组合在一起,形成一个综合性的图形。
  3. 数据分析:将多个数据集在同一张图中显示,进行筛选和筛选。
  4. 可视化规范化:将多个来源不同的数据集在同一张图中显示,保证图形的一致性和准确性。

【matplotlib基础】--子图的更多相关文章

  1. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  2. Matplotlib基础图形之散点图

    Matplotlib基础图形之散点图 散点图特点: 1.散点图显示两组数据的值,每个点的坐标位置由变量的值决定 2.由一组不连续的点组成,用于观察两种变量的相关性(正相关,负相关,不相关) 3.例如: ...

  3. Matplotlib基础知识

    Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度标签 ...

  4. matplotlib基础

    Matplotlib 基础 注:本文中的程序都默认引入了numpy库和matplotlib库,并且分别简写为np与plt:如果读者不知道怎么使用numpy库,可以移步到这一博客上进行简单的学习 一.简 ...

  5. Matplotlib基础使用

    matplotlib 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis 水平和垂直的轴线 x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度 ...

  6. 模块简介与matplotlib基础

    模块简介与matplotlib基础 1.基本概念 1.1数据分析 对已知的数据进行分析,提取出一些有价值的信息. 1.2数据挖掘 对大量的数据进行分析与挖掘,得到一些未知的,有价值的信息. 1.3数据 ...

  7. [笔记]SciPy、Matplotlib基础操作

    NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...

  8. 第二周 数据分析之展示 Matplotlib基础绘图函数实例

    Pyplot基础图表函数 Pyplot饼图的绘制: Pyplot直方图的绘制: Pyplot极坐标图的绘制: Pyplot散点图的绘制: 单元小结: import numpy as np import ...

  9. matplotlib基础知识全面解析

    图像基本知识: 通常情况下,我们可以将一副Matplotlib图像分成三层结构: 1.第一层是底层的容器层,主要包括Canvas.Figure.Axes: 2.第二层是辅助显示层,主要包括Axis.S ...

  10. python数据图形化—— matplotlib 基础应用

    matplotlib是python中常用的数据图形化工具,用法跟matlab有点相似.调用简单,功能强大.在Windows下可以通过命令行 pip install matplotlib 来进行安装. ...

随机推荐

  1. 一文教会你用Apache SeaTunnel Zeta离线把数据从MySQL同步到StarRocks

    在上一篇文章中,我们介绍了如何下载安装部署SeaTunnel Zeta服务(3分钟部署SeaTunnel Zeta单节点Standalone模式环境),接下来我们介绍一下SeaTunnel支持的第一个 ...

  2. Spring 核心概念之一 IoC

    前言 欢迎来到本篇文章!通过上一篇什么是 Spring?为什么学它?的学习,我们知道了 Spring 的基本概念,知道什么是 Spring,以及为什么学习 Spring.今天,这篇就来说说 Sprin ...

  3. 确保使用正确的CSI提交HW问题

    最近有用户一体机有问题,需要技术支持,首先找到我这边,其实就是一个简单的坏盘类问题,换盘即可. 在保期间,要求客户提交一个SR给后台,但是客户提交后,就一直被要求提供HW的CSI号: xxx: Can ...

  4. 【LGR-142-Div.4】洛谷入门赛 #13 赛后总结

    A.魔方 目测入门 -,就是需要开long long //1 #include<bits/stdc++.h> typedef long long valueType; int main() ...

  5. ASIC加速技术在ASIC加速性能优化中的新应用与挑战

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 1. 引言 随着计算机技术的发展,芯片的性能和面积都得到了极大的提升.为了进一步提高芯片的 ...

  6. mysql索引优化-01

    1.1索引是什么?   mysql官方对于索引的定义:可以帮助mysql高效的获取数据的数据结构.   mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构给以某种引 ...

  7. Java 字符串反转,举例:键盘录入”abc”输出结果:”cba”

    代码如下: public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out. ...

  8. C# - ConcurrentDictionary 并发场景使用注意事项

    1 自身作为 Enumerable 的遍历 自身作为可遍历对象,键值对为元素进行遍历,是线程安全的,但不提供快照,遍历过程中集合产生变更会直接反馈至此次遍历过程中.但并不一定能够保障获取数据的过程中, ...

  9. 我用numpy实现了GPT-2,GPT-2源码,GPT-2模型加速推理,并且可以在树莓派上运行,读了不少hungging face源码,手动实现了numpy的GPT2模型

    之前分别用numpy实现了mlp,cnn,lstm和bert模型,这周顺带搞一下GPT-2,纯numpy实现,最重要的是可在树莓派上或其他不能安装pytorch的板子上运行,生成数据 gpt-2的ma ...

  10. ASP.NET MVC4 学习笔记-2

    渲染网页-Randering Web Pages 前面示例的输出结果不是HTML,而是一个"Hello World"的字符串.为了响应浏览器的请求产生一个HTML网页,我们需要创建 ...