精华内容
下载资源
问答
  • matlab subplot大小调整

    千次阅读 2020-06-29 16:35:52
    主要是position 参考链接:https://www.cnblogs.com/gisalameda/p/12840600.html

    在这里插入图片描述
    主要是position
    参考链接:https://www.cnblogs.com/gisalameda/p/12840600.html

    展开全文
  • [subplot_handles,LabelsFontSize] = subplotplus(subplot_array,varargin) 是 MATLAB 的继承 subplot() 函数的增强替代方案。 使用 subplotplus() 几乎可以在特定图形中创建任何子图布局。 所需的子图布局使用复杂...
  • figure(3) set(gcf,'color',[1 1 1]) set(gcf,'position',[150 10 600 800...subplot(221) plot(t1,V_b1(id*3-2,:),'color','r') axis tight h=legend('Case1'); set(h,'box','off','fontsize',6,'location','best')...
    figure(3)
    set(gcf,'color',[1 1 1])
    set(gcf,'position',[150 10 600 800])
    subplot(221)
    plot(t1,V_b1(id*3-2,:),'color','r')
    axis tight
    h=legend('Case1');
    set(h,'box','off','fontsize',6,'location','best')
    xlabel('Time/s','fontsize',10)
    ylabel('X-Velocity/m/s','fontsize',10)
    set(gca,'position',[0.08 0.55 0.4 0.43])
    subplot(222)
    plot(t2,V_b2(id*3-2,:),'color','g')
    axis tight
    h=legend('Case2');
    set(h,'box','off','fontsize',6,'location','best')
    xlabel('Time/s','fontsize',10)
    ylabel('X-Velocity/m/s','fontsize',10)
    set(gca,'position',[0.58 0.55 0.4 0.43])
    subplot(223)
    plot(t3,V_b3(id*3-2,:),'color','b')
    axis tight
    h=legend('Case3');
    set(h,'box','off','fontsize',6,'location','best')
    xlabel('Time/s','fontsize',10)
    ylabel('X-Velocity/m/s','fontsize',10)
    set(gca,'position',[0.08 0.06 0.4 0.43])
    subplot(224)
    plot(t4,V_b4(id*3-2,:),'color','k')
    axis tight
    h=legend('Case4');
    set(h,'box','off','fontsize',6,'location','best')
    xlabel('Time/s','fontsize',10)
    ylabel('X-Velocity/m/s','fontsize',10)
    set(gca,'position',[0.58 0.06 0.4 0.43])
    

    其中set(gca,‘position’,[0.58 0.06 0.4 0.43 ])
    四个数分别代表距y轴的距离、距x轴的距离、图宽、图长

    展开全文
  • 左上角的数字编号见我另一篇博文,Matlab使用subplot绘制子图时编号(a)(b)©(d) 。 这里由于超过26个字母改位数字了。 https://blog.csdn.net/jh1513/article/details/105660861 解决方法 首先明确我们是...

    来源

    处理实验数据,由于很多个小类别,全部用个subplot绘制出来,发现两边的空白太多,想把两边空白删除。直接上图处理签和处理后的结果, 实验结果被我用hold off 取消掉了,不影响此处说明。
    左上角的数字编号见我另一篇博文,Matlab使用subplot绘制子图时编号(a)(b)©(d) 。 这里由于超过26个字母改位数字了。
    https://blog.csdn.net/jh1513/article/details/105660861
    在这里插入图片描述
    在这里插入图片描述

    解决方法

    首先明确我们是可以调整matlab图形的具体位置,边框等, 相关资料见matlab参考手册以及figure, axes 等属性设置,具体我也没有整太懂,matlab所搜 控制坐标区布局. 在此给一个图,
    在这里插入图片描述
    说了这么多,直接上函数代码,首先是针对单个Figure的调整代码,然后这个代码有应用到subplot情况下。

    figure类型

    这个地方没有设置输出参数,可以考虑输入坐标轴句柄,但是我原来计划是针对当前激活的窗口进行调整的,所以没有输入参数,直接用 gca 获取当前窗口的坐标轴句柄。 在 subplot类型中会设置函数输入参数,具体遇到的问题待会讨论。

    这个函数主要思想是,获取 坐标轴 TightInset 属性(具体参考 Axes 属性中相关介绍),然后获取 Position 属性, 通过两种属性重新计算出一个新的Position属性,当然就是这里把两侧空白区域干掉的。这段代码是网络上找到的,感谢那些网友。
    下面的图(matlab copy的)显示由 OuterPosition 值(蓝色)、Position 值(红色)以及由 TightInset 值(品红色)外扩的 Position 定义的区域。
    在这里插入图片描述

    方法一

    function [] = RemoveFigMarginArea()
    
    inset_vectior = get(gca, 'TightInset');
    % inset_vectior = get(gca, 'Position');
    inset_x = inset_vectior(1);
    inset_y = inset_vectior(2);
    inset_w = inset_vectior(3);
    inset_h = inset_vectior(4);
    
    % OuterPosition
    outer_vector = get(gca, 'OuterPosition');
    pos_new_x = outer_vector(1) + inset_x; % move the orignal point of Position to that of the TightInset
    pos_new_y = outer_vector(2) + inset_y;
    pos_new_w = outer_vector(3) - inset_w - inset_x; % reset the width of Position
    pos_new_h = outer_vector(4) - inset_h - inset_y; % reset the height of Position
    
    % Position
    set(gca, 'Position', [pos_new_x, pos_new_y, pos_new_w, pos_new_h]);
    
    hold on
    end
    
    
    

    方法二

    在matlab 官方英文问答中找到另一种简单语句, matlab官方定义为:
    TightInset - 为 Position 属性值中的宽度和高度所添加的边距,指定为 [left bottom right top] 形式的向量。此属性是只读的。在添加轴标签和标题时,MATLAB® 会更新这些值以适应文本。Position 和 TightInset 属性所定义的边界大小包含所有图形文本。
    他得到坐标轴外侧流出来的左侧,下侧,右侧,上侧的空白区域,归一化单位定义的, 然后用 1 减去水平方向的 left 和 right,得到水平方向宽度,同样得到竖直方向高度,然后把这些值赋值给“Position”属性,即可以消除两侧空白区。
    注意,这个设置应该到导出图形的之前设置,因为更改标题,坐标轴标签会改变‘TightInset ’属性值。

    figure;
    AxesH = axes;
    drawnow;
    InSet = get(AxesH, 'TightInset');
    set(AxesH, 'Position', [InSet(1:2), 1-InSet(1)-InSet(3), 1-InSet(2)-InSet(4)])
    

    核心思想和上面一样,获取 “TightInset” 的值

    subplot类型

    如果把上面那段代码用在建立一个figure 后,又在subplot之前,我这里在使用subplot之后两侧空白区域还是很大,具体原因我没有分析过,然后网上又找到一段代码,我针对自己的应用改了改,如下。
    我在使用中遇到过一个问题,当调整子图大小位置之后,可能出现之前的子图会消失。原因是因为,调整一个子图大小,当其和之前的子图有重合是,之前子图被删除了,详情见matlab官方论坛,相关帖子如下: 帖子一帖子二
    处理方法是:先把所有子图绘制出来,然后在一个一个调整,由于我的子图太多,我的方法是: 创建子图之后获取坐标轴句柄然后把他们存起来, 后面再在循环里面修改子图位置, subFig = subplot(m,n,i); subAxes = gca;

    这里函数设置了输入参数,首先是要调整子图的坐标轴句柄subAxes,然后是subplot的行列数 m,n,最后是当前子图编号,中间设置了左右两边预留距离marginLeftRight 和上下边缘预留距离 marginTopBottom 。

    调整子图大小思想是: 根据你创建subplot子图行列数量将整个figure划分成一个一个小块,由于默认position参数中使用的是跪一个的容器单位,整个长高都为1 则每一个的长高分别为 1/n,1/m; 然后我使用 [col, row] = ind2sub([n,m],p); 计算出当前编号的图在整个figure中的行列位置,注意subplot子图填充顺序和数组元素的顺序是不一样的。我预留 0.05 倍的长度作为 ylabel 的位置,然后上下 0.05 倍高度分别作为 xlabel 和 title 位置,这个参数往往根据整个 figure 的大小调节的,弄出函数输入参数的形式。根据上面这些位置关系我就能计算出每一个子图坐标系的起始位置以及长度和高度,然后设置子图的坐标系位置,最后调整子图外边框的大小(上面Figure类的代码)

    function [] = RemoveSubplotMarginArea(subAxes, m,n,p)
    % Remove the blank area in the margin of the figure/subplot of the current
    % active figure/subplot
    
    % subAxes: handle of the axes of the subplot
    % m :   row of the subplot
    % n :   column of the subplot
    % p :   the index of the current/actived subplot
    
    % Attention: for saving fig, using the following command to set the
    % parameter, otherwise, this function cannot change the fig saved
    % set(gcf, 'PaperPositionMode', 'auto');
    
    if nargin <4
        p = 1;
    
    end
    
    % ind2sub: Convert linear indices to subscripts. Please note that the
    % direction of subplot is different from arrays.
    % col : the column of the actived subplot
    % row : the row of the actived subplot
    [col, row] = ind2sub([n,m],p);
    
    % OuterPosition
    % set the left and right margins for the whole figure 
    marginLeftRight = 0.01; 
    % set the top and bottom margins for the whole figure 
    marginTopBottom = 0.1;
    % The followin code divide the whole fig to m row and n column
    sub_axes_x = (col-1) * (1-2*marginLeftRight)/n                          + marginLeftRight;
    sub_axes_y = (1 - 2*marginTopBottom) -row * (1 - 2*marginTopBottom)/m   + marginTopBottom; 
    sub_axes_w = (1-2*marginLeftRight)/n;
    sub_axes_h = (1-2*marginTopBottom)/m;
    
    % set the margin for title, xlabel, ylabel
    delt_w = 0.05 * 1/n;
    delt_h = 0.05 * 1/m;
    % pos = [sub_axes_x + delt_w, sub_axes_y + delt_h,...
    %                 sub_axes_w - delt_w, sub_axes_h - 2* delt_h]
    set(subAxes, 'OuterPosition', [sub_axes_x + delt_w, sub_axes_y + delt_h,...
                    sub_axes_w - delt_w, sub_axes_h - 2* delt_h]); % OuterPosition
    
    
    % TightInset
    inset_vectior = get(subAxes, 'TightInset');
    % inset_vectior = get(gca, 'Position');
    inset_x = inset_vectior(1);
    inset_y = inset_vectior(2);
    inset_w = inset_vectior(3);
    inset_h = inset_vectior(4);
    
    % OuterPosition
    outer_vector = get(subAxes, 'OuterPosition');
    pos_new_x = outer_vector(1) + inset_x; % move the orignal point of Position to that of the TightInset
    pos_new_y = outer_vector(2) + inset_y;
    pos_new_w = outer_vector(3) - inset_w - inset_x; % reset the width of Position
    pos_new_h = outer_vector(4) - inset_h - inset_y; % reset the height of Position
    
    % Position
    set(subAxes, 'Position', [pos_new_x, pos_new_y, pos_new_w, pos_new_h]);
    
    
    end
    
    
    

    终极方法

    最近看到一个调整边距的方法,如下一条语句,具体链接点我

    set(gca,'LooseInset', max(get(gca,'TightInset'), 0.02))
    
    展开全文
  • 1. 问题描述 ...无论 A 和 B 的 size 是否一致,最终显示出来的 figure 中的两幅图像大小都是相同的。 2. 原因及解决 之所以第二个图看起来和第一张图等大,是因为第二个 subplot 的 XY 轴的单位长度比第...

    1. 问题描述

    figure
    subplot(1, 2, 1), imshow(A)
    subplot(1, 2, 2), imshow(B)

    无论 A 和 B 的 size 是否一致,最终显示出来的 figure 中的两幅图像大小都是相同的。

    2. 原因及解决

    之所以第二个图看起来和第一张图等大,是因为第二个 subplot 的 XY 轴的单位长度比第一个subplot中的要长(二者的比例尺不同)。所以简单一点的解决方法是:将第二个 subplot 的 XLim 和 YLim 属性设为和第一个 subplot 中的对应属性值。

    3. demo:图像金字塔变换

    % 加载图像数据到内存
    I = imread('cameraman.tif');
    size(I)
    
    % reduce ==> {2, 4, 8}
    I1 = impyramid(I, 'reduce'); size(I1)
    I2 = impyramid(I1, 'reduce'); size(I2)
    I3 = impyramid(I2, 'reduce'); size(I3)
    
    figure
    a1 = subplot(1, 4, 1); imshow(I),  
    xs = get(a1, 'xlim'); ys = get(a1, 'ylim');
    a2 = subplot(1, 4, 2); imshow(I1),
    set(a2, 'xlim', xs, 'ylim', ys);
    a3 = subplot(1, 4, 3); imshow(I2),
    set(a3, 'xlim', xs, 'ylim', ys);
    a4 = subplot(1, 4, 4); imshow(I3)
    set(a4, 'xlim', xs, 'ylim', ys);
    
    I1 = impyramid(I, 'expand'); size(I1)
    I2 = impyramid(I1, 'expand'); size(I2)
    I3 = impyramid(I2, 'expand'); size(I3)
    
    figure
    a1 = subplot(1, 4, 1); imshow(I3),  
    xs = get(a1, 'xlim'); ys = get(a1, 'ylim');
    a2 = subplot(1, 4, 2); imshow(I2),
    set(a2, 'xlim', xs, 'ylim', ys);
    a3 = subplot(1, 4, 3); imshow(I1),
    set(a3, 'xlim', xs, 'ylim', ys);
    a4 = subplot(1, 4, 4); imshow(I)
    set(a4, 'xlim', xs, 'ylim', ys);

    转载于:https://www.cnblogs.com/mtcnn/p/9421365.html

    展开全文
  • 解决方法:有两种解决方法可以实现:使用subplot命令使用axes函数来重新规定子图的大小和位置。这两种方法中,第一种方法相对简单,但是第二种方法更加灵活,具体使用如下:第一种方法:使用subplot先看一下subplot...
  • MatlabSUBPLOT的图像大小调整

    万次阅读 2015-04-30 21:08:18
    (1)subplot的子窗口都是固定的,其设置是内置的默认值,你可以通过axes函数来重新规定子窗口的大小和位置。如: axes('position',[.1 .1 .8 .6]) mesh(peaks(20)); axes('position',[.1 .7 .8 .2]) ...
  • matlab subplot调节位置

    千次阅读 2020-05-29 23:52:44
    % 先让MATLAB默 认绘制第1幅子图,h是子图1的句柄 po = get( h, 'Position' ); % get命令从句柄h中获取'Position'的内容,返回一个含4个元素的一维数组放到po中。这4个元 素分别是子图1的left, bottom, width, ...
  • 本帖最后由 meatball1982 于 2016-10-29 08:52 编辑好长时间了,终于通过ax 的position设置来解决了。clear allclcclfsbp_width=0.8;...[out_pos]=fun_mm_subplot_pos(n_row,n_col,sbp_width,sbp_heig);h=figur...
  • 绘制子图时,可以使用 tight_subplot 函数,这里MATLAB 官方的subplot 函数也能达到相同的效果。 subplot(‘Position’,pos) creates axes in the custom position specified by pos. Use this option to position...
  • 根据图形的坐标轴的大小确定中间位置或者是想要的位置,如下图所示,横坐标师10^6为单位的坐标轴,左边一点的位置大概为-300000,纵坐标最下面一幅图的总高度为1,倒数第二幅图像总高度为0.4,加上下面的空白处,...
  • 1. 问题描述MATLAB基本的子图绘制功能,可以在一个figure中绘制大小相等的多个子图。有时,我们需要绘制更为复杂的子图样式,如下:这样的问题可以称之为子图的分块绘制,也就是每个子图占用不同比例的空间。2. 技术...
  • subplot(1,2,1)函数表示产生图片1行2列第一张图片,直接subplot几张形式不同的图片...首先对plot函数设置x轴y轴大小,然后设置比例。 subplot(1,2,1) plot(J1) axis([1 400 0 0.5])%x轴从1到400,y轴从0到0.5 ...
  • 在平铺位置创建坐标轴 语法 subplot(m,n,p) subplot(m,n,p,‘replace’) subplot(m,n,p,‘align’) subplot(m,n,p,ax) subplot(‘Position’,pos) ...MATLAB® 按行号对子图位置进行编号。第一个子图是第一行的第
  • MATLAB subplot显示不同尺度图像

    千次阅读 2014-09-16 12:11:26
    图像金字塔基本操作,使用MATLAB显示各个尺度的图像时,使用subplot显示的为大小一致的图像,不是多尺度的,在网上查了一些资料,下面贴一下我实验的各种方法。  subplotMATLAB中的函数。     使用方法:...
  • Matlabsubplot函数

    千次阅读 2020-02-17 08:36:01
    其中,m和n指定将图形窗口分成m*n个绘图区,p指定当前活动区,p的大小以行方向计数。 2、代码示例 clc; clear all; x = linspace(0,2*pi,60); subplot(2,2,1); plot(x, sin(x)-1); title('sin(x)-1');axis([0, 2...
  • Matlab中调整subplot中子图的位置

    千次阅读 2020-05-10 22:26:06
    Matlab中调整subplot中子图的位置Matlab中调整subplot中子图的位置 这是我第一次在CSDN上写博客,如果有什么对于文章有什么建议的话可以在评论中提出(虽然我不一定会看)。 Matlab中调整subplot中子图的位置 如果...
  • MATLAB subplot、 stem

    千次阅读 2019-08-03 21:40:27
    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(___) ...
  • 1. 原理 figure如同一张画布,axes是坐标轴用来控制所画图的位置和大小。 在matlab的帮助文档中Graphics->Formatting and Annotation->Coordinate System->Properties->Axes ...
  • MATLABsubplot(mnq)什么意思 M:代表行 N:代表列 Q:代表第几个 示例: 代码: clc,clear,close all; f= imread('zui.jpg'); subplot(311); imshow(f);title('1') subplot(312); imshow(f);title('2') ...
  • MATLAB subplot子图分块绘制的方法

    千次阅读 2020-11-14 09:53:38
    MATLAB基本的子图绘制功能,可以在一个figure中绘制大小相等的多个子图。有时,我们需要绘制更为复杂的子图样式,如下: 这样的问题可以称之为子图的分块绘制,也就是每个子图占用不同比例的空间。 2. 技术...
  • 针对matlab图片四周空白区域较大,导入word后需要手动裁剪,因此希望使用matlab的m文件自动去除图片四周空白区域。 我第一次解决方法的链接为:https://mp.csdn.net/mdeditor/82852006# ,因为该方法有一定缺点,...
  • subplot 在平铺位置创建坐标区 语法: subplot(m,n,p) subplot(‘Position’,pos) 说明: (1)subplot(m,n,p) 将当前图窗划分为 m×n 网格,并在 p 指定的位置创建坐标区。如果指定的位置已存在坐标区,则此命令会...
  • (注:本人使用的malab版本为:Matlab 2018a。) 1.想法来源 1.1需求来源** 绘制图片时需要存储用于word文章编辑中,而存储的图片空白区域较大(相对图片实际内容而言占据太多空间),需要在word中手动裁剪。图片...
  • matlab显示图片命令:f1=imread('E:/iaprtc12/iaprtc12/images/02/2007.jpg') %读取图像矩阵imshow(f1) %显示该图像 但是如果需要在一个界面内显示多幅图片 就需要SubPlot命令帮助了形式:subplot(m,n,p)或者subplot...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,164
精华内容 3,265
关键字:

matlabsubplot的大小

matlab 订阅