当前位置: 首页 > news >正文

030_Subplot_In_Matlab中多图绘制之subplot函数

在这里插入图片描述

基于子图的多图方法

专业的论文中通常涉及到多个有逻辑关系的图拼接在一起,构成相互支持或者对照。所以很早之前,Matlab就有这个子图的函数subplot

这个函数的基本语义有三类:

  • 在图窗上划分出一个矩形区域建立一个坐标系,并指定该坐标系为当前坐标系
  • 把一个坐标系替换成另外一个坐标系,并指定为当前坐标系
  • 把一个坐标系指定为当前坐标系

因为Matlab的绘图指令可以忽略坐标系参数,并利用gca函数获取当前坐标系。所以当运行上述子图函数后,后续不指定坐标系的绘图指令就会在指定的坐标系上进行。

基于格子的多图方法

% 基本的子图:利用subplot函数,并用函数语法画图
figure;
% 1. 画一个2x2的子图
subplot(2,2,1);
plot(1:10,1:10);
title('1');subplot(2,2,2);
plot(1:10,1:10);
title('2');subplot(2,2,3);
plot(1:10,1:10);
title('3');subplot(2,2,4);
plot(1:10,1:10);
title('4');

在这里插入图片描述

简单的说,子图的编号采取了行先的方式,下面给出一个循环的例子,可以看到,图号按照n * i + j的方式编号,其中n是行数,i是行号,j是列号。

figure;m = 2;  % 行数
n = 3;  % 列数for row = 1:mfor col = 1:nidx = (row-1)*n + col;subplot(m,n,idx);plot(1:10,1:10);title(['子图编号' num2str(idx)]);end
end

在这里插入图片描述

实际上,子图可以拼凑在一起,比如下面这个例子中,把第一行的两个图绘制完成后;再创建一个两行一列的图,把第二行的子图作为一个子图。就形成了三个子图的图像。

% 稍微复杂的子图:利用subplot函数,并用函数语法画图
figure;
% 1. 画一个2x2的子图
ax1 = subplot(2,2,1);
plot(ax1,1:10,1:10);
title(ax1,'1');ax2 = subplot(2,2,2);
plot(ax2,1:10,1:10);
title(ax2,'2');% 一个2x1的格子,横跨两列的子图
ax3 = subplot(2,1,2);
plot(ax3,1:10,1:10);
title(ax3,'3');

在这里插入图片描述

当然,从下面的例子可以看到,当有两个子图发生重叠时,就把先绘制的那个子图删除替换成新的子图。这里,先把第一行的两个子图绘制完成后,再绘制第二列的一个子图,这样就把第一行的第二个子图删除了。当然,左下角子图也可以顺利添加进来。

% 稍微复杂的子图:利用subplot函数,并用函数语法画图
figure;
% 1. 画一个2x2的子图
ax1 = subplot(2,2,1);
plot(ax1,1:10,1:10);
title(ax1,'1');ax2 = subplot(2,2,2);
plot(ax2,1:10,1:10);
title(ax2,'2');% 一个1x2的格子,横跨两列的子图(删除了2,2,2对应的坐标系)
ax3 = subplot(1,2,2);
plot(ax3,1:10,1:10);
title(ax3,'3');ax4 = subplot(2,2,3);
plot(ax4,1:10,1:10);
title(ax4,'4');

在这里插入图片描述

按照位置的多图方法

除了按照简单的行先编号的方式来创建子图坐标系,还可以直接设定子图的位置和大小还创建坐标系,这里就可以使用Position属性来设置子图,跟所有的Position属性一样,这里的位置包括了左下角的位置、宽度和高度。当然,这里采用的单位是归一化的单位,也就是左下角为(0, 0),右上角为(1, 1)

figure;
ax1 = subplot("Position", [0.1 0.1 0.4 0.4]);
plot(1:10,1:10);
title('1');ax2 = subplot("Position", [0.5 0.5 0.3 0.3]);
plot(1:10,1:10);
title('2');ax3 = subplot("Position", [0.8 0.8 0.1 0.1]);
plot(1:10,1:10);
title('3');

在这里插入图片描述

这里有同样的问题,把上面脚本中子图坐标系的位置稍微调整一下就会发现,当有两个图重叠时,后绘制的图会把先绘制的图覆盖掉。

图中图的实现方法

当然,我知道你们在想什么,那么怎么绘制多个图,相互交叉(例如绘制部分放大图)呢?这就是图中图(画中画)的概念。要实现这个也很简单。

直接调整子图坐标系

那这样一想,我们能不能先分快创建子图坐标系,然后在调整Position属性来调整子图的位置呢?当然可以,下面的例子就是这样做的。

figure;
ax1 = subplot(2,2,1);
plot(1:10,1:10);
title('1');ax2 = subplot(2,2,2);
plot(1:10,1:10);
title('2');ax3 = subplot(2,2,3);
plot(1:10,1:10);
title('3');ax4 = subplot(2,2,4);
plot(1:10,1:10);
title('4');ax1.Position = [0.15, 0.5, 0.5, 0.3];
ax2.Position = [0.75, 0.5, 0.2, 0.3];
ax3.Position = [0.1, 0.1, 0.8, 0.8];
ax3.Color = 'none';

在这里插入图片描述

创建子图坐标系

是否可以直接创建子图坐标系呢?当然可以,下面的例子就是这样做的。

只需要把subplot换成axes就可以,这个时候,就按照位置定位的方式来创建坐标系,通过把坐标系的背景颜色设置为none,就能把一个坐标系设定为透明。下面比较了是否设置为透明的效果。

f = figure;
ax1 = axes("Position", [0.1 0.1 0.4 0.4]);
plot(1:10,1:10);
title('1');ax2 = axes("Position", [0.45 0.45 0.3 0.3], 'Color', 'y');
plot(1:10,1:10);
title('2');ax3 = axes("Position", [0.7 0.7 0.1 0.1], 'Color', 'g');
plot(1:10,1:10);
title('3');ax4 = axes("Position", [0.2 0.2 0.7 0.7]);
x = 0:0.01:2*pi;
y = sin(x);
plot(x, y);
title('4');ax1.Color = 'r';
ax2.Color = 'g';
ax3.Color = 'y';
ax4.Color = 'none';exportgraphics(f, 'colors.png');

在这里插入图片描述

严肃一点,我们真正的做一个图中图,也就是对一个图的局部进行放大。

x = 0:0.01:2*pi;
y = sin(x);% 绘制一个图像
figure;
plot(x, y);
xlabel('x');
ylabel('y');
title('y = sin(x)');% 增加一个坐标在pi/2处的放大图ax1 = axes("Position", [0.6 0.6 0.2 0.2]);
idx = x >= pi/2-0.1 & x <= pi/2+0.1;
plot(x(idx), y(idx));
title('Zoomed view', Color='r');
xlim([pi/2-0.1, pi/2+0.1]);
ylim([0.9, 1.1]);% 绘制一个箭头,指向放大区域
annotation('arrow', X=[0.58 0.35], Y=[0.75 0.9]);
annotation('rectangle', [0.285 0.9 0.05 0.05]);

在这里插入图片描述

这里比较烦人的就是要手动调整标注(箭头、方框)的位置,而且这个坐标是针对整个图的,不是针对子图的,也就是左小角坐标是(0,0),右上角坐标(1,1),宽度和高度的范围都是[0, 1]

新的多图方法预告

从2022b开始就,一种新的、更加清晰的多图方法出现了。后面再写一个文章详细介绍这个方法。

相关文章:

030_Subplot_In_Matlab中多图绘制之subplot函数

基于子图的多图方法 专业的论文中通常涉及到多个有逻辑关系的图拼接在一起&#xff0c;构成相互支持或者对照。所以很早之前&#xff0c;Matlab就有这个子图的函数subplot。 这个函数的基本语义有三类&#xff1a; 在图窗上划分出一个矩形区域建立一个坐标系&#xff0c;并指…...

免费云服务器有什么使用限制和注意事项?

在数字化时代&#xff0c;云计算已经成为许多企业和个人用户的重要工具。对于初创企业、开发者和学生来说&#xff0c;免费的云服务器提供了一个低成本的解决方案&#xff0c;使他们能够进行项目开发、学习和实验。但在使用过程中也存在一些限制和注意事项。以下是主要的使用限…...

3-ZYNQ 折腾记录 -PS_PL AXI Interfaces

Zynq UltraScale MPSoC集成了功能丰富的四核或双核Arm Cortex-A53 MPCore基于处理系统(Processing System, PS)和可编程逻辑(Programmable Logic, PL)的单一设备。 PS和PL可以使用多个接口和其他信号进行紧密或松散的耦合。这使设计人员能够有效地将用户创建的硬件加速器和其他…...

总结test

1.IO流 |-- 字节流操作任何类型文件|-- 字符流操作纯字符类文件|-- BIO 传统IO流&#xff0c;阻塞型的&#xff0c;也就是BIO&#xff0c;当执行IO流时&#xff0c;CPU只能等待执行完当前任务&#xff0c;才能去执行其他线程任务|-- NIO非阻塞型IO流&#xff0c;CPU可以同时执行…...

在 On hold 期刊 eLife 上发表一篇生信文章需要什么工作量?

生信碱移 科研圈动态 根据弗雷赛斯以及相关媒体最新消息&#xff0c;中科院一区TOP&#xff0c;著名生命科学期刊 eLife [IF: 6.4]已被科睿唯安官方 On hold&#xff01; ▲ 官网截图。图片来源&#xff1a;https://mjl.clarivate.com/home eLife是一本专注于生物医学和生命科…...

使用Django框架开发企业级Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Django框架开发企业级Web应用 1 引言 2 Django简介 3 安装Python与Django 4 创建Django项目 5 设计应用结构 6 创…...

认识线程 — JavaEE

目录 认识线程&#xff08;Thread&#xff09; 1 线程是什么? 2 为什么要有线程 3 进程和线程的区别 区别一 区别二 区别三 区别四 4. Java的线程和操作系统线程的关系 认识线程&#xff08;Thread&#xff09; 1 线程是什么? 一个线程就是一个 "执行流"。…...

【C++单调栈】853. 车队|1678

本文涉及的基础知识点 C单调栈 LeetCode853. 车队 在一条单行道上&#xff0c;有 n 辆车开往同一目的地。目的地是几英里以外的 target 。 给定两个整数数组 position 和 speed &#xff0c;长度都是 n &#xff0c;其中 position[i] 是第 i 辆车的位置&#xff0c; speed[i…...

第十届文荣奖华丽开幕,郁葱以青春与努力绽放青年演员光芒

10月27日&#xff0c;第十届文荣奖在众人的期待中盛大开启&#xff0c;内地青年女演员郁葱受邀出席&#xff0c;作为国内颇具影响力的影视奖项&#xff0c;文荣奖一直以来都致力于发掘和表彰优秀的影视作品和青年影视人才&#xff0c;为影视行业的发展注入新的活力&#xff0c;…...

CMake 生成器表达式介绍

【写在前面】 生成器表达式在构建系统生成期间进行评估&#xff0c;以生成特定于每个构建配置的信息。它们的形式为 $<...>。例如&#xff1a; target_include_directories(tgt PRIVATE /opt/include/$<CXX_COMPILER_ID>) 这将扩展为 “/opt/include/GNU”、“/opt…...

ubuntu 20.04编译驱动报gcc-12 not found错误

最近在自己安装的Ubuntu 系统上编译自定义驱动&#xff0c;发现无法编译.ko,错误如下&#xff1a; 按照如下操作&#xff0c;发现可以解决&#xff0c;记录下&#xff0c;主要是Ubuntu缺少g-12的包 安装包以后发现可以正常编译...

docker sameersbn/bind dns服务器

1. 安装 #下载docker 镜像 docker pull sameersbn/bind#运行 53端口若被占用会启动失败 docker run --name dns -d --restartalways \ --publish 53:53/tcp \ --publish 53:53/udp \ --publish 10000:10000/tcp \ -v /etc/localtime:/etc/localtime \ -v /data/bind/:/data \…...

错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘

这个错误提示说明在提交时某个文件的大小超过了 Gitee 仓库的单文件大小限制&#xff08;100MB&#xff09;。你需要从Git 历史中彻底移除这个大文件&#xff0c;否则无法推送到远程仓库。 解决步骤 1. 确认大文件信息 使用以下命令找出超过限制的大文件&#xff1a; git re…...

深度剖析美区代理IP的多元应用与优势

在当今数字时代&#xff0c;代理IP&#xff08;Proxy IP&#xff09;已成为互联网使用中的一项关键技术。尤其在美区&#xff0c;代理IP在数据采集、网络安全及在线隐私保护等领域发挥着越来越重要的作用。本文将深入探讨代理IP的基本概念、应用场景以及它带来的诸多优势&#…...

基于KV260的基础视频链路通路(MIPI+Demosaic+VDMA)

目录 1. 简介 1.1 要点 1.2 背景 1.2.1 Got stuck 1.2.2 Cant be Initialized 2. Overlay 2.1 参考 Overlay 2.1.1 KV260 Base 2.1.2 Pynq-CV-OV5640 2.2 自建 Overlay 2.2.1 IIC IP 2.2.2 MIPI CSI-2 Rx 2.2.3 AXI4-S Subset 2.2.4 Demosaic 2.2.5 Pixel Pack …...

Uni-App-04

主页开发 保存主页数据 <script> import { indexData, base } from /serviceexport default {data() {return {base, //把服务器基础地址变量设置为数据属性carousels:[], //轮播广告条目列表menuItems:[], //当前用户选中的功能菜单列表activities:[], //最新的…...

ElasticSearch分片

本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》 ElasticSearch作为一个搜索引擎&#xff0c;会存储海量的数据。而存储海量的数据&#xff0c;就要解决如何存储的问题&#xff0c;并且保证数据不会丢失&#xff0c;同时还需要保证数据检索的效率&#xff0c;尽可能…...

spring高手之路

以下是一些可以快速入门Spring的方法&#xff1a; 1. 学习基础知识 阅读官方文档&#xff1a;Spring官方文档是最权威的学习资料。它详细介绍了Spring的各个模块、概念和使用方法。从核心模块开始&#xff0c;了解如依赖注入&#xff08;DI&#xff09;和控制反转&#xff08…...

工字钢与H型钢有什么区别?90%的工程师都搞错了!

这里为大家做一个详尽的解答&#xff1a;很多人认为工字钢是国内的叫法&#xff0c;H型钢是国外的叫法&#xff0c;其实这个认知是错误的。H型钢和工字钢从形状上来说是不一样的&#xff0c;见下图&#xff1a; 工字钢 工字钢主要分为普通工字钢、轻型工字钢和宽翼缘工字钢。按…...

10个程序员可以接私活的平台(非常详细)零基础入门到精通,收藏这篇就够了

私活接的好收入不比上班少&#xff0c;一些同学靠接私活月收入也上万甚至几万了。今天老韩来分享一下有哪些接私活的网站和平台&#xff0c;转发收藏以后备用 我们先来聊聊什么样的私活不能接。。 1、没有第三方担保的个人对个人的尽量不要接&#xff0c;双方都没保障&#x…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...