Matplotlib绘图基础之子图详解

 更新时间:2023年07月28日 15:47:48   作者:databook  
这篇文章主要为大家详细介绍了Matplotlib绘制子图的常用方式和技巧,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下

使用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个元素的含义:

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

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

4. 总结回顾

Matplotlib 中的每个子图可以有自己的标签、大小、位置和样式,可以方便地组合成一个复杂的图形。

我们一般在下列场景中使用子图:

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

到此这篇关于Matplotlib绘图基础之子图详解的文章就介绍到这了,更多相关Matplotlib子图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python使用scapy模块实现ping扫描的过程详解

    python使用scapy模块实现ping扫描的过程详解

    这篇文章主要介绍了python使用scapy模块实现ping扫描的过程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Python使用Paramiko模块编写脚本进行远程服务器操作

    Python使用Paramiko模块编写脚本进行远程服务器操作

    这篇文章主要介绍了Python使用Paramiko模块编写脚本进行远程服务器操作的实例,通过Paramiko能够方便地使用SSH服务,需要的朋友可以参考下
    2016-05-05
  • Python爬虫基础之XPath语法与lxml库的用法详解

    Python爬虫基础之XPath语法与lxml库的用法详解

    这篇文章主要给大家介绍了关于Python爬虫基础之XPath语法与lxml库用法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • 利用Python如何制作贪吃蛇及AI版贪吃蛇详解

    利用Python如何制作贪吃蛇及AI版贪吃蛇详解

    这篇文章主要给大家介绍了关于利用Python如何制作贪吃蛇及AI版贪吃蛇的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python中内置的日志模块logging用法详解

    Python中内置的日志模块logging用法详解

    Python的logging模块提供了记录程序运行情况的日志功能,类似于Apache的log4j,很好很强大,这里我们就来看一下Python中内置的日志模块logging用法详解
    2016-07-07
  • Python如何加载模型并查看网络

    Python如何加载模型并查看网络

    这篇文章主要介绍了Python如何加载模型并查看网络,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python UnicodeEncodeError: ''gbk'' codec can''t encode character 解决方法

    Python UnicodeEncodeError: ''gbk'' codec can''t encode chara

    这篇文章主要介绍了Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法,需要的朋友可以参考下
    2015-04-04
  • 利用python实现你说我猜游戏的完整实例

    利用python实现你说我猜游戏的完整实例

    这篇文章主要给大家介绍了关于如何利用python实现你说我猜游戏的相关资料,用到的都是一些简单的基础的python语句,适合刚入门的小白,可以尝试跟着一起敲一下,感受一下编程中的乐趣,需要的朋友可以参考下
    2022-05-05
  • 深入了解Python枚举类型的相关知识

    深入了解Python枚举类型的相关知识

    这篇文章主要介绍了深入了解Python枚举类型的相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python对输出的奇数偶数排序实例代码

    python对输出的奇数偶数排序实例代码

    在本篇内容里小编给大家整理的是一篇关于python对输出的奇数偶数排序实例代码内容,有兴趣的朋友们可以参考下。
    2020-12-12

最新评论