【Python基础】Matplotlib如何绘制多个子图的几种方法

2023-11-04

作者:雪山飞猪

博客地址:

https://www.cnblogs.com/chenqionghe/p/12355018.html

说明:本文经作者授权转载,禁止二次转载

Matplotlib是Python的底层绘图工具,可定制性很强,很多人刚开始使用Matplotlib时,不明白一些基础概念,比如figure和axis的区别?如何绘制多个子图的图表?这次写个小短文来讲一讲。

fig和axis的区别?

相信不少小伙伴一开始都是直接用plt.plot来绘图,非常简单,但这是偷懒的做法,不建议大家这样。

fig, ax = plt.subplots(2,2)是比较正统的画法(参数代表行列数),指定figure和axes,然后对axes单独进行操作(图表元素增加和修改)。

fig相当于是一个大的画布,ax相当于是小的子图,一个画布可以有一个或多个子图。

单个图表任何操作都是在axes对象上进行的,包括坐标轴、刻度、图例等。

具体怎么用,下面讲到。

绘制多子图

使用Matplotlib绘图单图相对比较容易,但有时候需要将多张图放在一张图表里,这就用到子图操作。

对应的有plt的subplot和figure的add_subplot的方法,参数可以是一个三位数字(例如111),也可以是一个数组(例如[1,1,1]),3个数字分别代表:

  • 子图总行数

  • 子图总列数

  • 子图位置

以下三种方式效果一样,呈现的可视化图表如下:

「方式一:通过plt的subplot」

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 画第1个图:折线图
x=np.arange(1,100)
plt.subplot(221)
plt.plot(x,x*x)
# 画第2个图:散点图
plt.subplot(222)
plt.scatter(np.arange(0,10), np.random.rand(10))
# 画第3个图:饼图
plt.subplot(223)
plt.pie(x=[15,30,45,10],labels=list('ABCD'),autopct='%.0f',explode=[0,0.05,0,0])
# 画第4个图:条形图
plt.subplot(224)
plt.bar([20,10,30,25,15],[25,15,35,30,20],color='b')
plt.show()

「方式二:通过figure的add_subplot」

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure()
# 画第1个图:折线图
x=np.arange(1,100)
ax1=fig.add_subplot(221)
ax1.plot(x,x*x)
# 画第2个图:散点图
ax2=fig.add_subplot(222)
ax2.scatter(np.arange(0,10), np.random.rand(10))
# 画第3个图:饼图
ax3=fig.add_subplot(223)
ax3.pie(x=[15,30,45,10],labels=list('ABCD'),autopct='%.0f',explode=[0,0.05,0,0])
# 画第4个图:条形图
ax4=fig.add_subplot(224)
ax4.bar([20,10,30,25,15],[25,15,35,30,20],color='b')
plt.show()

「方式三:通过plt的subplots」subplots返回的值的类型为元组,其中包含两个元素:第一个为一个画布,第二个是子图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

fig,ax=plt.subplots(2,2)
# 画第1个图:折线图
x=np.arange(1,100)
ax[0][0].plot(x,x*x)
# 画第2个图:散点图
ax[0][1].scatter(np.arange(0,10), np.random.rand(10))
# 画第3个图:饼图
ax[1][0].pie(x=[15,30,45,10],labels=list('ABCD'),autopct='%.0f',explode=[0,0.05,0,0])
# 画第4个图:条形图
ax[1][1].bar([20,10,30,25,15],[25,15,35,30,20],color='b')
plt.show()

绘制不规则子图

前面的两个图占了221和222的位置,如果想在下面只放一个图,得把前两个当成一列,即2行1列第2个位置。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 画第1个图:折线图
x=np.arange(1,100)
plt.subplot(221)
plt.plot(x,x*x)
# 画第2个图:散点图
plt.subplot(222)
plt.scatter(np.arange(0,10), np.random.rand(10))
# 画第3个图:条形图
# 前面的两个图占了221和222的位置,如果想在下面只放一个图,得把前两个当成一列,即2行1列第2个位置
plt.subplot(212)
plt.bar([20,10,30,25,15],[25,15,35,30,20],color='b')
plt.show()

往期精彩回顾




适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群请扫码进群(如果是博士或者准备读博士请说明):
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python基础】Matplotlib如何绘制多个子图的几种方法 的相关文章

随机推荐

  • 24-系统自带的 Win+R 功能

    Win 运行窗口 Win R 开始菜单 gt 运行 是 Windows 的一个原生的功能 从 XP 到 Windows 10 都自带了 当用户按下快捷键 Win R Win 为键盘上Windows图标键 后 系统会弹出一个小窗口让你输入命令
  • 用户态虚拟化IO通道实现概览及实践(上)

    自虚拟化技术诞生起 提升虚拟化场景中IO设备性能和驱动的兼容性 可扩展性一直是备受关注和追求的目标 随着半虚拟化技术的出现 virtio设备及驱动也很快流行并逐步变成了虚拟化应用中的主要IO通道形态 例如 virtio现已支持实现的设备涵盖
  • Dell IDRAC服务器重装系统详解(远程连接)

    主要的操作步骤文末附上的那篇博客写的比较详细了 不足的地方是有一些小问题没有说明白 导致新手可能不太清楚操作 而无法 复现 安装过程 TIPS 1 远程连接登录的时候 用户名root 密码calvin不一定可行 如果不行的话 看一下服务器机
  • 研一Python基础课程第四周课后习题分享(含源代码)

    代码写的较多 有问题可以私聊我 第四周作业分享 一 题目前言 二 题目分享 1 问题1 2 问题2 3 问题3 4 问题4 5 问题5 6 问题6 7 问题7 8 问题8 9 问题9 10 问题10 11 问题11 12 问题12 13 问
  • 深度学习之经典案例 CIFAR10 图形识别(jupyter)

    图像识别 CIFAR10图形识别 1 CIFAR10数据集共有60000张彩色图像 这些图像式32 32 3 分为10个类 每个类6000张 2 这里面有50000张用于训练 构成5个训练批 每一批10000张图 另外10000张用于测试
  • Centos7网卡配置——动态与静态

    Centos7网卡配置 一 自动获取动态IP地址 二 配置静态IP地址 三 修改网卡注意事项 四 基础知识 以下实例全部基于VM虚拟机操作 一 自动获取动态IP地址 1 输入命令 ip addr 查看IP地址 右下图可以发现只有一张名为en
  • git版本回退到某一次提交

    背景 今天一个前端女同事问我她如何才能回退到上一次她提交的版本 她网上找了方法 却没有起作用 问题虽然简单 但是还是记录下来 解决问题 使用命令 git log查看提交记录 并复制下想要回退到那个版本的commitId 就是commit后面
  • 医学图像肝脏分割(一)---预处理

    预处理是肝脏分割重要的一步 良好的预处理过程可以有效的提高分割的准确度 此博文主要记录肝脏分割过程中常见的预处理方法及相关代码 一 标准的预处理过程 1 Kaggle LUNA16 competition preprocessing tut
  • 创建Component的方式

    createClass createClass 组件的props state等都是以对象属性的方式组合在一起 其中默认属props和初始state都是返回对象的函数 component component state是通过在构造函数中对th
  • php通过递归获取分公司的上下级数据

    1 表结构 2 php核心代码 param branches 全部分公司数据 param parentId 查询的分公司id 传0则全部排序 大于0 则查询该分公司下的下级 param int level 层级 方便界面特效 param i
  • html怎么给背景图固定位置,css实现固定背景图像的方法

    css实现固定背景图像的方法 发布时间 2020 08 29 11 26 59 来源 亿速云 阅读 81 作者 小新 小编给大家分享一下css实现固定背景图像的方法 相信大部分人都还不怎么了解 因此分享这篇文章给大家参考一下 希望大家阅读完
  • 重磅!《2022中国开源发展蓝皮书》正式发布

    作为数字时代的新趋势 开源正以 开放 共享 协同 商业模式 的新型生产方式 以 自由 的传播形式 成为全球信息技术发展的强大推动力 在全世界开源大发展的背景下 近年来中国开源的发展速度已成为全球最快 局部领域已接近或达到世界先进水平 其迸发
  • Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

    关于Valgrind的介绍可以参考 https blog csdn net fengbingchun article details 50196189 这里介绍下在Ubuntu 16 04上通过android toolchain如andro
  • 一套简单的基本生活财富自由方案

    前言 之前一直觉得财富自由似乎遥不可及 但今年学习理财以来 至今已有一年的样子了 读完了100本书 再加上实操经验 发现虽然成为富豪依然遥不可及 但一些基本的财富自由方案已经可以实现了 试算了一下 按照保守收益估计 其实是完全可以实现的 经
  • hadoop支持lzo完整过程

    简介 部署 安装lzop native library 安装hadoop lzo 配置hadoop环境变量 验证lzo通过hive测试 创建lzo表 导入数据 索引LZO文件 利用hive执行mr任务 修改使用中hive表的输入输出格式 简
  • .\Objects\new project.axf: Error: L6200E: Symbol __asm___17_system_mb9bf40x_等5个报错的原因

    不知道有没有人遇到我这种问题 二十分钟才大概把错误原因的范围锁定在device那里 这是所有的报错 如果你遇到了这样的错误 那么接下来就可以解决这个问题了 提示重复定义了后面的 这里无论你用的什么芯片 只要报错的前部分信息一样 我想解决办法
  • Python发送Post请求及解析响应结果

    一 Post请求 1 使用python发送一个Post请求 有时候遇到请求url中有很多参数 1 1 示例1 accounts和pwd请到http shop xo hctestedu com 注册 import requests 请求体 d
  • 父组件监听子组件声明周期的方法

    父组件 hook mounted watchChild watchChild写监听到子组件生命周期触发后 要走的逻辑
  • 【Confluence】创建分级文件目录

    需求 在confluence文档中构建如下图所示的分级目录文件 解决 首先在该目录下创建一个文件 确定好位置 创建好之后 在该创建好的文件下在重复创建文件即可
  • 【Python基础】Matplotlib如何绘制多个子图的几种方法

    作者 雪山飞猪 博客地址 https www cnblogs com chenqionghe p 12355018 html 说明 本文经作者授权转载 禁止二次转载 Matplotlib是Python的底层绘图工具 可定制性很强 很多人刚开