MATLAB中subplot函数的使用

目录

语法

说明

示例

上部和下部子图

子图的象限 

大小不同的子图

将子图替换为空坐标区 

自定义位置上的子图 

创建包含极坐标区的子图 

创建后修改坐标区属性

使子图成为当前坐标区

将现有坐标区转换为子图 

将不同图窗中的坐标区转换为子图 


        subplot函数的功能是在各个分块位置创建坐标区。

语法

subplot(m,n,p)
subplot(m,n,p,'replace')
subplot(m,n,p,'align')
subplot(m,n,p,ax)
subplot('Position',pos)
subplot(___,Name,Value)
ax = subplot(___)
subplot(ax)

说明

subplot(m,n,p) 将当前图窗划分为 m×n 网格,并在 p 指定的位置创建坐标区。MATLAB® 按行号对子图位置进行编号。第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推。如果指定的位置已存在坐标区,则此命令会将该坐标区设为当前坐标区。

subplot(m,n,p,'replace') 删除位置 p 处的现有坐标区并创建新坐标区。

subplot(m,n,p,'align') 创建新坐标区,以便对齐图框。此选项为默认行为。

subplot(m,n,p,ax) 将现有坐标区 ax 转换为同一图窗中的子图。

subplot('Position',pos) 在 pos 指定的自定义位置创建坐标区。使用此选项可定位未与网格位置对齐的子图。指定 pos 作为 [left bottom width height] 形式的四元素向量。如果新坐标区与现有坐标区重叠,新坐标区将替换现有坐标区。

subplot(___,Name,Value) 使用一个或多个名称-值对组参数修改坐标区属性。在所有其他输入参数之后设置坐标区属性。

ax = subplot(___) 创建一个 Axes 对象、PolarAxes 对象或 GeographicAxes 对象。以后可以使用 ax 修改坐标区。

subplot(ax) 将 ax 指定的坐标区设为父图窗的当前坐标区。如果父图窗尚不是当前图窗,此选项不会使父图窗成为当前图窗。

示例

上部和下部子图

        创建带有两个堆叠子图的图窗。在每个子图上绘制一条正弦波。

subplot(2,1,1);
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)

subplot(2,1,2); 
y2 = sin(5*x);
plot(x,y2)

        如图所示:

子图的象限 

        创建一个分为四个子图的图窗。在每个子图上绘制一条正弦波并为每个子图指定标题。

subplot(2,2,1)
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)
title('Subplot 1: sin(x)')

subplot(2,2,2)
y2 = sin(2*x);
plot(x,y2)
title('Subplot 2: sin(2x)')

subplot(2,2,3)
y3 = sin(4*x);
plot(x,y3)
title('Subplot 3: sin(4x)')

subplot(2,2,4)
y4 = sin(8*x);
plot(x,y4)
title('Subplot 4: sin(8x)')

        如图所示:

大小不同的子图

        创建一个包含三个子图的图窗。在图窗的上半部分创建两个子图,并在图窗的下半部分创建第三个子图。在每个子图上添加标题。

subplot(2,2,1);
x = linspace(-3.8,3.8);
y_cos = cos(x);
plot(x,y_cos);
title('Subplot 1: Cosine')

subplot(2,2,2);
y_poly = 1 - x.^2./2 + x.^4./24;
plot(x,y_poly,'g');
title('Subplot 2: Polynomial')

subplot(2,2,[3,4]);
plot(x,y_cos,'b',x,y_poly,'g');
title('Subplot 3 and 4: Both')

        如图所示:

将子图替换为空坐标区 

        创建一个包含四个随机数据针状图的图窗。然后将第二个子图替换为空坐标区。 

for k = 1:4
    data = rand(1,10);
    subplot(2,2,k)
    stem(data)
end

        如图所示:

subplot(2,2,2,'replace')

         如图所示:

自定义位置上的子图 

        创建包含两个未与网格位置对齐的子图的图窗。为每个子图指定一个自定义位置。

pos1 = [0.1 0.3 0.3 0.3];
subplot('Position',pos1)
y = magic(4);
plot(y)
title('First Subplot')

pos2 = [0.5 0.15 0.4 0.7];
subplot('Position',pos2)
bar(y)
title('Second Subplot')

        如图所示:

创建包含极坐标区的子图 

        创建包含两个极坐标区的图窗。在上部子图中创建极坐标线图,在下部子图中创建极坐标散点图。

figure
ax1 = subplot(2,1,1,polaraxes);
theta = linspace(0,2*pi,50);
rho = sin(theta).*cos(theta);
polarplot(ax1,theta,rho)

ax2 = subplot(2,1,2,polaraxes);
polarscatter(ax2,theta,rho)

        如图所示:

创建后修改坐标区属性

        创建带有两个子图的图窗。将 Axes 对象赋给变量 ax1 和 ax2。将 Axes 对象指定为绘图函数的输入,以确保绘图函数在特定的子图中进行绘制。

ax1 = subplot(2,1,1);
Z = peaks;
plot(ax1,Z(1:20,:))

ax2 = subplot(2,1,2);  
plot(ax2,Z)

         如图所示:

        通过设置 Axes 对象的属性来修改坐标区。更改上部子图的字体大小和下部子图的线宽。某些绘图函数可设置坐标区属性。先执行绘图函数,然后指定坐标区属性以免覆盖现有坐标区属性的设置。使用圆点表示法设置属性。 

使子图成为当前坐标区

        创建一个包含多个子图的图窗。将 Axes 对象存储在向量 ax 中。然后使第二个子图成为当前坐标区。创建一个线图并更改第二个子图的坐标轴范围。默认情况下,图形函数作用于当前坐标区。

for k = 1:4
    ax(k) = subplot(2,2,k);
end

subplot(ax(2))
x = linspace(1,50);
y = sin(x);
plot(x,y,'Color',[0.1, 0.5, 0.1])
title('Second Subplot')
axis([0 50 -1 1])

        如图所示:

将现有坐标区转换为子图 

        创建一个线图。然后转换坐标区,使其成为图窗的下部子图。subplot 函数使用原始坐标区所在的图窗。

x = linspace(1,10);
y = sin(x);
plot(x,y)
title('Sine Plot')

        如图所示:

ax = gca;
subplot(2,1,2,ax)

         如图所示:

将不同图窗中的坐标区转换为子图 

        将位于不同图窗中的坐标区合并到包含子图的单个图窗中。

        在两个不同的图窗中创建两个图。将 Axes 对象赋给变量 ax1 和 ax2。将 Legend 对象赋给变量 lgd。

figure
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)
title('Line Plot 1')

        如图所示:

ax1 = gca;

figure
y2 = 2*sin(x);
plot(x,y2)
title('Line Plot 2')
lgd = legend('2*Sin(x)');

        如图所示:

ax2 = gca;

        使用 copyobj 创建两个 Axes 对象的副本。将复制的坐标区的父级指定为新图窗。由于图例和颜色栏不会随相关坐标区一起复制,因此请随坐标区一起复制图例。

fnew = figure;
ax1_copy = copyobj(ax1,fnew);
subplot(2,1,1,ax1_copy)

copies = copyobj([ax2,lgd],fnew);
ax2_copy = copies(1);
subplot(2,1,2,ax2_copy)

        如图所示:

 输入参数说明

m - 网格行数

        网格行数,指定为正整数。

n - 网格列数

        网格列数,指定为正整数。

p - 新坐标区的网格位置

新坐标区的网格位置,指定为标量或正整数向量。

  • 如果 p 是正整数标量,则 subplot 在网格位置 p 处创建一个子图。

  • 如果 p 是正整数向量,则 subplot 新建一个跨 p 中列出的网格位置的子图。

示例:subplot(2,3,1) 在位置 1 处创建一个子图。

示例: subplot(2,3,[2,5]) 创建跨位置 2 和 5 的子图。

示例: subplot(2,3,[2,6]) 创建跨位置 2、3、5 和 6 的子图。

pos - 新坐标区的自定义位置

        新坐标区的自定义位置,指定为 [left bottom width height] 形式的四元素向量。

  • left 和 bottom 元素指定子图的左下角相对于图窗的左下角的位置。

  • width 和 height 元素指定子图维度。

        指定介于 0 和 1 之间的归一化值(基于图窗内界)。

        注意:使用脚本创建子图时,在发出 drawnow 命令或 MATLAB 返回到等待用户命令之前,MATLAB 不会最终确定 Position 属性值。在脚本刷新绘图或退出之前,子图的 Position 属性值会受到变化的影响。

ax - 要设为当前坐标区或转换为子图的现有坐标区

        要设为当前坐标区或转换为子图的现有坐标区,指定为 Axes 对象、PolarAxes 对象、GeographicAxes 对象或具有 PositionConstraint 属性的图形对象,如 HeatmapChart 对象。

        要在子图位置创建空的极坐标区或地理坐标区,请将 ax 指定为 polaraxes 或 geoaxes 函数。例如,subplot(2,1,2,polaraxes)。

提示

  • 要清除图窗的内容,请使用 clf。例如,您可以在创建新子图布局之前清除图窗中的现有子图布局。

  • 要叠加坐标区,请改用 axes 命令。subplot 函数会删除与新坐标区重叠的现有坐标区。例如,subplot('Position',[.35 .35 .3 .3]) 会删除所有底层坐标区,但 axes('Position',[.35 .35 .3 .3]) 会将新坐标区置于图窗的中部而不删除底层坐标区。

  • subplot(111) 是一个例外,其行为与 subplot(1,1,1) 不同。出于向后兼容的原因,subplot(111) 是子图的一种特殊情况,它不立即创建坐标区,而是设置图窗,以便接下来的图形命令执行 clf reset。接下来的图形命令将删除所有图窗子级,并在默认位置创建新的坐标区。subplot(111) 不返回 Axes 对象,如果代码指定了返回参数,将会发生错误。

替代功能

        ​使用 tiledlayout 和 nexttile 函数创建可配置的绘图平铺。配置选项包括:​

  • 对绘图之间和布局边缘周围间距的控制

  • 布局顶部共享标题的选项

  • 共享 x 轴和 y 轴标签的选项

  • 用于控制分块是固定大小还是可以调整的可变大小的选项

  • 56
    点赞
  • 334
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在MATLABsubplot函数可以将一个绘图区域分割成多个小区域,每个小区域可以绘制一个独立的图形。subplot函数的基本用法是: ``` subplot(m,n,p) ``` 其,m和n表示将绘图区域分割成m行n列,p表示当前子图所在的位置。例如,subplot(2,3,4)表示将绘图区域分割成2行3列,当前子图位于第4个小区域。 在使用subplot函数之后,可以通过plot等函数在当前子图进行绘图,例如: ``` subplot(2,3,1) plot(x,y) ``` 表示在第1个小区域绘制一幅图形。当需要在多个子图绘制图形时,可以多次调用subplot函数,例如: ``` subplot(2,3,1) plot(x,y) subplot(2,3,2) plot(x,z) subplot(2,3,3) plot(y,z) ``` 这将在一个2行3列的绘图区域绘制三个子图。 ### 回答2: matlabsubplot函数可以将一个大的图形区域划分成多个小的区域,并且在每个小区域内绘制不同的图像。在多个子图区域绘制不同的图像可使数据更加直观地展示和比较,从而提高数据分析的效率。subplot函数的基本用法如下: subplot(m,n,p) 其,m和n表示将原图划分成m行n列的小区域,p表示当前要绘制的子图在小区域的位置,取值为1到m×n。示例代码如下: %生成一个1~10的随机向量 x = rand(1,10); %生成一个10~19的随机向量 y = rand(1,10)+10; %生成一个20~29的随机向量 z = rand(1,10)+20; %绘制3个子图 subplot(2,2,1) plot(x) title('第1个子图') subplot(2,2,2) plot(y) title('第2个子图') subplot(2,2,3:4) plot(z) title('第3个子图') 运行上述代码,就可以在matlab界面绘制出三个不同的子图。第一个子图占据左上角的小区域,第二个子图占据右上角的小区域,第三个子图占据下方大区域,跨越了左下角和右下角两个小区域。 除了基本用法,subplot函数还有一些高级应用。例如,可以将多张图片批量地绘制在一张图上,或者将多个图表绘制在同一区域内并互相关联。这些高级应用需要更加深入地学习和理解,可以参考matlab官方文档或者matlab的在线教程。 ### 回答3: MATLAB是一种常用的科学计算软件,可以方便地进行二维、三维绘图以及数据分析处理等多种操作,其subplot函数是常用的绘图函数之一。 subplot函数是用于在一个图形窗口实现多个子图显示的函数,可以将一幅大图分成多个小图进行显示,从而实现多种数据对比分析的效果。该函数的调用格式为 subplot(m,n,p),其m表示子图的行数,n表示子图的列数,p表示当前绘制的子图编号。例如,当m=2, n=2时,p的取值范围为 1,2,3,4,分别表示第1, 2, 3, 4个子图。 下面是该函数的具体用法以及相关参数的解释: 1. subplot(m,n,p):在一个图形窗口创建一个m行n列的子图,并选第p个子图。 2. subplot(m,n,p,'align'):这里的align为可选参数,表示在多个子图之间保持相同的轴范围和刻度线。 3. h=subplot(...):该函数可以返回一个子图对象,可以用于子图属性的修改以及在子图绘制多种图形等操作。 4. subplot('position',[left bottom width height]):该函数可以用于自定义子图的位置和大小,其left为子图的左边缘与图形窗口左边缘之间的距离,bottom为子图的底边缘与图形窗口底边缘之间的距离,width为子图的宽度,height为子图的高度。 除此之外,subplot还有其他参数,如'delete'等,具体可以在MATLAB的帮助文档查看。 总之,subplot函数MATLAB常见的绘图函数之一,可以实现多个子图在同一个图形窗口实现的并排显示,十分方便和实用。掌握其用法可以让绘图更加简单高效,从而达到更好的数据分析和可视化效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值