IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 第八章 使用 matplotlib 在一个画布内绘制多个图 -> 正文阅读

[人工智能]第八章 使用 matplotlib 在一个画布内绘制多个图

系列文章目录

第一章 使用 matplotlib 绘制折线图
第二章 使用 matplotlib 绘制条形图
第三章 使用 matplotlib 绘制直方图
第四章 使用 matplotlib 绘制散点图
第五章 使用 matplotlib 绘制饼图
第六章 使用 matplotlib 绘制热力图
第七章 使用 matplotlib 绘制堆叠条形图
第八章 使用 matplotlib 在一个画布内绘制多个图



前言

上一章我们讲述了堆叠条形图的绘制,本章我们来讲述子图的绘制。


一、子图的介绍

前面讲述的图表绘制方法一次只会绘制一张图表,但是有些情况下,我们希望把一组图放在一起进行比较,有没有什么好的方法呢?matplotlib 中提供的 subplots() 可以很好的解决这个问题。通过调用 subplots() 可以将整个绘图区域分成 m * n 个子区域,每个子区域都可以绘制一个子图。
当 m = 1,n = 2 时,绘图区域的划分情况如下所示:
在这里插入图片描述
当 m = 2,n = 1 时,绘图区域的划分情况如下所示:
在这里插入图片描述
当 m = 2,n = 2 时,绘图区域的划分情况如下所示:
在这里插入图片描述

二、子图的绘制

下面我们通过例子来看 subplots() 函数的使用。

1.一个子图

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('plot sin')

plt.show()

在上面的代码中,调用 subplots() 函数时,没有传入参数,这样在默认情况下整个绘图区域只会包含一个子区域。subplots() 函数会返回两个值,一个是 fig,一个是 ax。接下来便可以使用 ax 对子图进行绘制。代码执行后得到的图形如下图所示:
在这里插入图片描述

2.多个子图

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x)
y2 = np.cos(x)

fig, ax = plt.subplots(nrows=2, ncols=1)

ax[0].plot(x, y1)
ax[0].set_title('plot sin')

ax[1].plot(x, y2)
ax[1].set_title('plot cos')

plt.show()

上面代码中,向 subplots() 函数传入参数 nrows 和 ncols,值分别为 2 和 1。这样整个绘图区域会被划分为两个子区域。返回值 ax 为包含两个子区域对象的数组,我们可以使用索引的方式来访问每个对象,下面便可以使用这两个对象进行绘图。代码执行后得到的图形如下图所示:
在这里插入图片描述
由于两个子图的横坐标相同,这样可以让两个子图共享横坐标。例如:

from os import sched_get_priority_max
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x)
y2 = np.cos(x)


fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True)

ax[0].plot(x, y1)
ax[0].set_title('plot sin')

ax[1].plot(x, y2)
ax[1].set_title('plot cos')

plt.show()

为了让两个子图共享横坐标,只需要在调用 subplots() 函数时传入参数 sharex,并设置其值为 True。代码执行后得到的图形如下图所示:
在这里插入图片描述
上面两个子图是上下排列,我们再来看看左右排列的情况。例如:

from os import sched_get_priority_max
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x)
y2 = np.cos(x)


fig, ax = plt.subplots(nrows=1, ncols=2)

ax[0].plot(x, y1)
ax[0].set_title('plot sin')

ax[1].plot(x, y2)
ax[1].set_title('plot cos')

plt.show()

为了让两个子图左右排列,只需要将参数 nrows 和 ncols 的值分别设置为 1 和 2。代码执行后得到的图形如下图所示:
在这里插入图片描述
上面图形中的子图长和宽不是很协调,下面我们通过参数来调整图形的长和宽的比例,例如:

from os import sched_get_priority_max
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x)
y2 = np.cos(x)


fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(18,5))

ax[0].plot(x, y1)
ax[0].set_title('plot sin')

ax[1].plot(x, y2)
ax[1].set_title('plot cos')

plt.show()

上面的代码中,在调用 subplots() 函数时,传入参数 figsize 来设置图形的长和宽。代码执行后得到的图形如下图所示:
在这里插入图片描述
上面图形中,两个子图左右排列而且纵坐标轴相同,这样我们可以设置让两个子图共享纵坐标轴,例如:

from os import sched_get_priority_max
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x)
y2 = np.cos(x)


fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(18,5), sharey=True)

ax[0].plot(x, y1)
ax[0].set_title('plot sin')

ax[1].plot(x, y2)
ax[1].set_title('plot cos')

plt.show()

为了让两个子图共享纵坐标轴,只需要向 subplots() 函数传入 sharey 参数,并设置其值为 True,代码执行后得到的图形如下图所示:
在这里插入图片描述
上面的例子中,调用 subplots() 函数返回的是一维数组,下面我们来看一个返回多维数组的例子:

from os import sched_get_priority_max
import matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x1)
y2 = np.cos(x1)

x2 = np.linspace(0, 2*np.pi, 40)
y3 = np.sin(x2)
y4 = np.cos(x2)

fig, ax = plt.subplots(nrows=2, ncols=2)

ax[0,0].plot(x1, y1)
ax[0,0].set_title('plot sin')

ax[0,1].plot(x1, y2)
ax[0,1].set_title('plot cos')

ax[1,0].scatter(x2, y3)
ax[1,0].set_title('plot scatter sin')

ax[1,1].scatter(x2, y4)
ax[1,1].set_title('plot scatter cos')

plt.show()

在上面的代码中,ax 是一个 2 * 2 的数组,所以在进行索引的时候,需要使用二维数组的索引方法。代码执行后得到的图形如下图所示:
在这里插入图片描述
上面四个图,左右可以共享 y 轴的坐标,上下可以共享 x 轴的坐标,下面我们来设置共享坐标轴,例如:

from os import sched_get_priority_max
import matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x1)
y2 = np.cos(x1)

x2 = np.linspace(0, 2*np.pi, 40)
y3 = np.sin(x2)
y4 = np.cos(x2)

fig, ax = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)

ax[0,0].plot(x1, y1)
ax[0,0].set_title('plot sin')

ax[0,1].plot(x1, y2)
ax[0,1].set_title('plot cos')

ax[1,0].scatter(x2, y3)
ax[1,0].set_title('plot scatter sin')

ax[1,1].scatter(x2, y4)
ax[1,1].set_title('plot scatter cos')

plt.show()

代码执行后得到的图形如下图所示:
在这里插入图片描述


总结

本章我们讲述了子图的绘制,它使得我们可以在同一个绘图区域绘制多个子图。

上一章 使用 matplotlib 绘制堆叠条形图

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:41:49  更:2022-04-26 11:43:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:33:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码