subplots()--matplotlib

news2024/11/18 19:53:35

1. 函数功能

成一个画布和若干子区。

2. 函数语法

matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, 
gridspec_kw=None, **fig_kw)

3. 函数参数与示例

参数含义
nrows, ncols画布被分成的行、列数
squeeze布尔值,是否压缩维度,默认取值为True:当取值为True时,1. 若只创建一个子区,则返回子区是一个标量;2. 若是N1或者1M个子区,则返回1维子区对象;3. 若为N*M(N>1且M>1)则返回二维数组。当取值为False时,总是返回二维数组
width_ratios每一列的相对宽度,默认每列宽度相等,可以指定宽度: width_ratios[i] / sum(width_ratios)
height_ratios每一行的相对高度,默认每列高度相等,可以指定宽度: height_ratios[i] / sum(height_ratios)
subplot_kw定义子区属性的关键字参数,如:绘图区域的背景颜色: facecolor
gridspec_kw
**fig_kw传递给figure对象的其他关键字

3.1 nrows与ncols

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

fig, ax = plt.subplots(2, 3, facecolor='y', alpha=0.3)
plt.show()

在这里插入图片描述

3.2 生成画布与1个绘图区域

3.2.1 squeeze=False

当squeeze参数取值为False,不压缩维度时,虽然只有一个绘图区域,绘图区域ax的返回结果依然为二维数组,因此,设定绘图区域的内容需要使用行列索引

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

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

fig, ax = plt.subplots(1, 1, squeeze=False,
                       subplot_kw=dict(facecolor='cornflowerblue', alpha=0.3))
ax[0,0].plot(x, y, ls='--', color='k', lw=2)
ax[0,0].set_xlabel('时间(s)')
ax[0,0].set_ylabel('振幅')
ax[0,0].set_title('简单折线图')
ax[0,0].grid(ls=':', lw=1, color='gray', alpha=0.8)
plt.show()

在这里插入图片描述

3.2.2 squeeze=True

当squeeze参数取值为True,压缩数组维度,产生一个绘图区域时返回一个标量,此时可以使用ax

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

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

fig, ax = plt.subplots(1, 1, squeeze=True,
                       subplot_kw=dict(facecolor='cornflowerblue', alpha=0.3))
ax.plot(x, y, ls='--', color='k', lw=2)
ax.set_xlabel('时间(s)')
ax.set_ylabel('振幅')
ax.set_title('简单折线图')
ax.grid(ls=':', lw=1, color='gray', alpha=0.8)
plt.show()

3.3 生成画布与N1个子区或1M个子区

3.3.1 N*1个子区

当squeeze取值为False时,ax返回二维数组;当squeeze取值为True时,ax返回一维数组。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

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

fig, ax = plt.subplots(2, 1, squeeze=True,
                       subplot_kw=dict(facecolor='lightgreen', alpha=0.3))
ax[1].plot(x, y, ls='--', color='k', lw=2)
ax[0].set_xlabel('时间(s)')
ax[0].set_ylabel('振幅')
ax[0].set_title('简单折线图')
ax[0].grid(ls=':', lw=1, color='gray', alpha=0.8)
plt.show()

在这里插入图片描述

3.3.2 1*M个子区

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

x = np.linspace(0, 2 * np.pi, 500)
y = np.sin(x) * np.cos(x)
y1 = x
fig, ax = plt.subplots(1, 3, squeeze=True,
                       subplot_kw=dict(facecolor='lightgreen', alpha=0.3))
ax[1].plot(x, y, ls='--', color='k', lw=2)
ax[0].set_xlabel('时间(s)')
ax[0].set_ylabel('振幅')
ax[0].set_title('简单折线图')
ax[2].plot(x, y1, ls=':', c='r')
ax[2].grid(ls=':', lw=1, color='gray', alpha=0.8)
plt.show()

在这里插入图片描述

3.4 N*M个子区(N>1,M>1)

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

x = np.linspace(0, 2 * np.pi, 500)
y = np.sin(x) * np.cos(x)
y1 = x
y2 = x ** 2
y3 = np.tan(x)
fig, ax = plt.subplots(2, 2, squeeze=False,
                       subplot_kw=dict(facecolor='snow', alpha=0.3, polar=True))
ax[0, 0].plot(x, y, ls='--', color='k', lw=2)
ax[0, 1].plot(x, y1, c='r')
ax[1, 0].plot(x, y2, ls=':', c='g', lw=2)
ax[1, 1].plot(x, y3, c='m')
plt.show()

在这里插入图片描述

3.5 sharex与sharey取值为布尔值

3.5.1 sharex与sharey均为False

当sharex=Fasle;sharey=False,每个子区的坐标轴均相互独立
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

x1 = np.linspace(0, 2 * np.pi, 500)
x = np.arange(0,10,0.5)
y = np.sin(x1) * np.cos(x1)
y1 = x1
y2 = x ** 2
y3 = np.tan(x)

fig, ax = plt.subplots(2, 2, sharex=False, sharey=False)
ax[0, 0].plot(x1, y, ls='--', color='k', lw=2)
ax[0, 1].plot(x1, y1, c='r')
ax[1, 0].plot(x, y2, ls=':', c='g', lw=2)
ax[1, 1].plot(x, y3, c='m')
plt.show()

在这里插入图片描述

3.5.2 sharex=True,sharey=False

当sharex=True;sharey=False,每个子区共享x轴,每个子区的y轴相互独立
fig, ax = plt.subplots(2, 2, sharex=True, sharey=False)

在这里插入图片描述

3.5.3 sharex=False,sharey=True

当sharex=False;sharey=TRUE,每个子区x轴刻度相互独立,所有子区共享y轴
fig, ax = plt.subplots(2, 2, sharex=False, sharey=True)

在这里插入图片描述

3.5.4 sharex=TRUE,sharey=True

当sharex=False;sharey=TRUE,每个子区共享x轴,每个子区共享y轴
fig, ax = plt.subplots(2, 2, sharex=True, sharey=True)

在这里插入图片描述

3.5 总结

取值含义
sharex=True, sharey=True所有子区共享相同的x轴与y轴
sharex=True, sharey=False所有子区共享相同的x轴,每个子区使用各自独立的y轴
sharex=False, sharey=True每个子区使用各自独立的x轴, 所有子区共享相同的y轴
sharex=False, sharey=False每个子区均使用各自独立的x轴与y轴,默认情况

3.6 sharex与sharey取值为{‘none’, ‘all’, ‘row’, ‘col’}

3.6.1 sharex=‘none’ 且 sharey=‘none’

这种情况下相当于sharex=False,sharey=Fasle;每个子区的坐标轴均相互独立
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

x1 = np.linspace(0, 2 * np.pi, 500)
y1 = x1
x2 = np.arange(0,10,0.5)
y2 = np.sin(x2) * np.cos(x2)
x3 = np.linspace(0,  np.pi, 500)
y3 = np.tan(x3)
x4 = np.arange(4,10,1)
y4 = x4**2

fig, ax = plt.subplots(2, 2, sharex='none', sharey='none')
ax[0, 0].plot(x1, y1, ls='--', color='k', lw=2)
ax[0, 1].plot(x2, y2, c='r')
ax[1, 0].plot(x3, y3, ls=':', c='g', lw=2)
ax[1, 1].plot(x4, y4, c='m')
plt.show()

在这里插入图片描述

3.6.2 sharex=‘all’ 且 sharey=‘none’

这种情况下相当于sharex='all'  且 sharey='none';每个子区x轴的均使用相同刻度,最后一行显示刻度标签
fig, ax = plt.subplots(2, 2, sharex='all', sharey='none')

在这里插入图片描述

3.6.3 sharex=‘none’ 且 sharey=‘all’

这种情况下相当于sharex='none'  且 sharey='all';每个子区y轴的均使用相同刻度,第一列显示共同的刻度标签
fig, ax = plt.subplots(2, 2, sharex='none', sharey='all')

在这里插入图片描述

3.6.4 sharex=‘all’ 且 sharey=‘all’

 这种情况下相当于sharex='all'  且 sharey='all';每个子区x轴与y轴的均使用相同刻度,第一列与最后一行显示共同的刻度标签
fig, ax = plt.subplots(2, 2, sharex='all', sharey='all')

在这里插入图片描述

3.6.5 sharex=‘all’ 且 sharey=‘row’

此时所有子区的x轴共享,同一行的y轴共享
fig, ax = plt.subplots(2, 2, sharex='all', sharey='row')

在这里插入图片描述

3.6.6 sharex=‘all’ 且 sharey=‘col’

此时所有子区的x轴共享,同一列的y轴共享
fig, ax = plt.subplots(2, 2, sharex='all', sharey='col')

在这里插入图片描述

3.6.7 sharex=‘none’ 且 sharey=‘row’

每个子区使用独立的x轴,每行共享相同的y轴
fig, ax = plt.subplots(2, 2, sharex='none', sharey='row')

在这里插入图片描述

3.6.8 sharex=‘none’ 且 sharey=‘col’

每个子区使用独立的x轴,每列共享相同的y轴
fig, ax = plt.subplots(2, 2, sharex='none', sharey='col')

在这里插入图片描述

3.6.9 sharex=‘row’ 且 sharey=‘all’

每行子区使用相同的x轴,所有子区使用相同的y轴
fig, ax = plt.subplots(2, 2, sharex='row', sharey='all')

在这里插入图片描述

3.6.10 sharex=‘row’ 且 sharey=‘none’

每行子区使用相同的x轴,所有子区使用各自独立的y轴
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

x1 = np.linspace(0, 2 * np.pi, 500)
y1 = x1
x2 = np.arange(0,10,0.5)
y2 = np.sin(x2) * np.cos(x2)
x3 = np.linspace(0,  np.pi, 500)
y3 = np.tan(x3)
x4 = np.arange(10,20,1)
y4 = x4**2

fig, ax = plt.subplots(2, 2, sharex='row', sharey='none')
ax[0, 0].plot(x1, y1, ls='--', color='k', lw=2)
ax[0, 1].plot(x2, y2, c='r')
ax[1, 0].plot(x3, y3, ls=':', c='g', lw=2)
ax[1, 1].plot(x4, y4, c='m')
plt.show()

在这里插入图片描述

3.6.11 sharex=‘row’ 且 sharey=‘row’

每行子区使用相同的x轴,每行子区共享y轴
fig, ax = plt.subplots(2, 2, sharex='row', sharey='row')

在这里插入图片描述

3.6.12 sharex=‘row’ 且 sharey=‘col’

每行子区使用相同的x轴,每列子区共享y轴
fig, ax = plt.subplots(2, 2, sharex='row', sharey='col')

在这里插入图片描述

3.6.13 sharex=‘col’ 且 sharey=‘all’

每列共享x轴,所有子区共享y轴
fig, ax = plt.subplots(2, 2, sharex='col', sharey='all')

在这里插入图片描述

3.6.14 sharex=‘col’ 且 sharey=‘all’

每列共享x轴,每个子区独立使用各自的y轴
fig, ax = plt.subplots(2, 2, sharex='col', sharey='none')

在这里插入图片描述

3.6.15 sharex=‘col’ 且 sharey=‘row’

每列共享x轴,每行共享y轴
fig, ax = plt.subplots(2, 2, sharex='col', sharey='row')

在这里插入图片描述

3.6.16 sharex=‘col’ 且 sharey=‘col’

每列共享x轴,每列共享y轴
fig, ax = plt.subplots(2, 2, sharex='col', sharey='col')

在这里插入图片描述

3.6 总结

取值含义
sharex=‘all’, sharey=‘all’所有子区共享x轴与y轴
sharex=‘all’, sharey=‘none’所有子区共享x轴,每个子区独立使用各自的y轴
sharex=‘all’, sharey=‘row’所有子区共享x轴,每行子区共享y轴
sharex=‘all’, sharey=‘col’所有子区共享x轴,每列子区共享y轴
sharex=‘none’, sharey=‘all’每个子区独立使用各自的x轴,所有子区共享y轴
sharex=‘none’, sharey=‘none’每个子区独立使用各自的x轴与y轴
sharex=‘none’, sharey=‘row’每个子区独立使用各自的x轴,每行子区共享y轴
sharex=‘none’, sharey=‘col’每个子区独立使用各自的x轴,每列子区共享y轴
sharex=‘row’, sharey=‘all’每行子区共享x轴, 所有子区共享y轴
sharex=‘row’, sharey=‘none’每行子区共享x轴, 每个子区独立使用各自的y轴
sharex=‘row’, sharey=‘row’每行子区共享x轴, 每行子区共享y轴
sharex=‘row’, sharey=‘col’每行子区共享x轴, 每列子区共享y轴
sharex=‘col’, sharey=‘all’每列子区共享x轴, 所有子区共享y轴
sharex=‘col’, sharey=‘none’每列子区共享x轴,每个子区独立使用各自的y轴
sharex=‘col’, sharey=‘row’每列子区共享x轴, 每行子区共享y轴
sharex=‘col’, sharey=‘col’每列子区共享x轴, 每列子区共享y轴

4. 返回值

1). 4.1 figure画布
2). 4.2 axes数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【畅购商城】用户登录

用户登录 构建页面&#xff1a;Login.vue步骤一&#xff1a;创建Login.vue步骤二&#xff1a;绘制通用模块<template> <div> <TopNav></TopNav> <div style"clear:both;"></div> <HeaderLogo></HeaderLogo> <div…

嵌入式开发--CubeMX使用入门教程

嵌入式开发–CubeMX使用入门教程 CubeMX简介 传统的单片机开发时&#xff0c;需要针对片上外设做各种初始化的工作&#xff0c;相当麻烦。 CubeMX是ST公司出品的一款图形化代码生成工具&#xff0c;通过图形化界面&#xff0c;可以非常直观的配置好各种片上外设&#xff0c;时…

一个方便IO单元测试的C#扩展库

对于我们.Net程序员&#xff0c;System.Web.Abstractions我们都非常熟悉&#xff0c;主要作用于Web可以实现单元测试&#xff0c;他是在.Net framework 3.5 sp1开始引入的,很好的解决项目表示层不好做单元测试的问题&#xff0c;这个库所有类都是Wrapper/Decorator模式的。今天…

[SpringBoot] Spring Boot注册Web原生组件/拦截器HandlerInterceptor

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

风控建模坏样本太少,不要再用过采样和欠采样了,试下这种更有效的方法

样本数据不平衡是我们建模场景中经常遇到的问题&#xff0c;由于目标类别的分布占比差异较大&#xff0c;使得模型训练难以取得较好的拟合效果&#xff0c;甚至模型结果在实际应用中无效。举个最常见的例子&#xff0c;在信贷场景中构建反欺诈模型时&#xff0c;训练样本数据的…

(附源码)计算机毕业设计SSM垃圾分类综合服务系统

&#xff08;附源码&#xff09;计算机毕业设计SSM垃圾分类综合服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

(27)语义分割--cityscape数据集的读取和使用

1、主要参考 (1) 图像分割cityscape数据集使用介绍 - 知乎 (2)torchvision支持很多现成的数据集 Datasets — Torchvision 0.13 documentation 。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。 2、下载…

CTFHub | 整数型注入

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

【Vue 快速入门系列】列表的基本使用

文章目录前言列表的基本使用Key的原理列表过滤列表排序前言 本篇文章讲述Vue中最基本的列表使用&#xff0c;如何迭代列表取值&#xff0c;如何对列表进行过滤、排序等。 列表的基本使用 在Vue中使用列表的时候灰常简单&#xff0c;只需要将Vue属性内的列表数据与dom标签进行…

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

目录 前言&#xff1a; 第1章 驱动程序功能设计 1.1 关于用户空间驱动 1.2 硬件驱动程序的四大功能概述 1.3 OAM管理面功能&#xff1a;站在管理源的角度&#xff0c;看如何监控使能和监控硬件。 1.4 控制面功能&#xff1a;站在业务的角度看&#xff0c;如何使能和监控硬…

基于Android的五子棋游戏APP设计

目 录 第一章&#xff1a;绪论 1 1.1智能手机与Android系统的发展历程 1 1.1.1 智能手机 1 1.1.2 Android系统基本情况介绍 2 1.2课题现状及应用前景 3 1.2.1 五子棋简介 3 1.2.2 课题现状及应用前景 3 第二章&#xff1a;开发环境的搭建 5 2.1 系统开发环境 5 2.2 系统开发环境…

SpringCould(一)

视频链接&#xff1a;https://www.bilibili.com/video/BV1f94y1U7AB/?vd_source9545770e4a2968c05878ffac8589ec6c 视频选集&#xff1a;P1— P15 文章目录1.微服务简介1.1 单体架构不足1.2 微服务1.3 微服务的特点1.4 微服务的自动部署&#xff08;CI/CD&#xff09;(持续集成…

一文了解数据结构

目录 数据结构 什么是数据结构 链表 数组 栈 队列 哈希表 堆 数据结构 什么是数据结构 「数据结构」决定了数据的顺序和位置关系.数据存储于内存时&#xff0c;决定了数据顺序和位置关系的便是「数据结构」 链表 「链表」中的数据呈线性排列。链表中添加删除数据比较…

多旋翼无人机仿真 rotors_simulator:基于PID控制器的位置控制---水平位置控制

多旋翼无人机仿真 rotors_simulator&#xff1a;基于PID控制器的位置控制---水平位置控制前言水平位置控制串级P控制收敛结果收敛过程串级PID控制收敛结果收敛过程结果总结前言 无人机&#xff08;Unmanned Aerial Vehicle&#xff09;&#xff0c;指的是一种由动力驱动的、无…

机器学习从零到入门 GBDT 梯度提升决策树

GBDT 梯度提升决策树详解一、 梯度的概念1、日常生活中的梯度2、函数中的梯度2.1、走进数学2.2、从数学到机器学习(1)、损失函数的理解 loss function(2)、梯度的理解 gradient(3)、损失函数的梯度下降二、GBDT1、回归树 - Regression Decision Tree&#xff0c;DT2、梯度提升 …

利用Python实现mysql数据库的基础操作

一&#xff1a;环境准备&#xff1a; 1.安装第三方库&#xff1a;pymsql 在pycharm的terminal中执行命令&#xff1a;pip3 install pymsql 2.导入第三方库到py文件中 import pymsql 二&#xff1a;创建mysql数据库的链接对象&#xff1a; 1.封装一个Python类&#xff0c;在该…

Python爬虫入狱小技巧

呀&#xff0c;来坐牢的是吧&#xff0c;坐牢是不可能坐牢的&#xff0c;骚年&#xff0c;下面就是方法&#xff0c;早上学&#xff0c;晚上进去 一、整体思路 爬虫一开始要把思路理清楚&#xff0c;即从网页源代码或者网页数据接口&#xff0c;获取需要的数据.大致思路如下 …

【Java进阶】JUC并发基础

文章目录1.概念1.1 什么是JUC1.2 线程与进程1.3 线程的几种状态1.4 守护线程1.5 死锁与活锁1.6 乐观锁与悲观锁1.7 自旋锁2.Lock2.1 使用Lock2.2 Lock与Synchronized2.3 虚假唤醒3.八锁问题3.1 创建一个Phone实例多线程调用两个方法3.2 创建一个Phone实例多线程调用两个方法&am…

基于热传导矩阵(HCM)边缘检测方法在红外图像中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

3道真题训练|学会链表的前世今生

&#x1f64b;很多朋友都问我学完基础知识以后怎样提高编程水平&#xff1f;当然是刷题啦&#xff01;很多小伙伴都在纠结从哪里开始&#xff0c;今天给大家推荐一个身边朋友都在使用的刷题网站&#xff1a;点击进入牛客网刷题吧&#xff01; &#x1f64b;‍♂️今天是Java …