Matlab图形窗口大小的控制 ,plot窗口大小,figure大小,axis设置

https://wenku.baidu.com/view/e09c4b55c281e53a5902ff13.html

screen,它定义了figure可以用的最大szie

Matlab中保存图像时,图形窗口大小的控制
首先要了解的是Matlab是面向对象的。最高等级的对象是screen,它定义了figure可以用的最大szie。
screen下面是figure。figue就是你画图的时候跳出来的那个新的对话窗口。如果figure变化,screen是不会跟着变化的。但screen变化的话,figure就要跟着变化了。

figure下面是axes

figure下面是axes。

axes是那个窗口里面你要画的东西。axes的大小和位置取决于figure,如果你放大缩小figure的大小的话,里面的图线也会跟着变化的。

set(gca,‘position’,[])

因此,set (gca,‘position’,[0.1,0.1,0.9,0.9] );的作用是:

设置坐标轴距离画板(图形窗口figure)边距。

[0.1,0.1,0.9,0.9] 分别为axes在figure中的左边界,下边界,宽度,高度,最小为0,最大为1(左边界,下边界为0,上边界,右边界为1)

见下面的例子:


figure

set (gca,‘position’,[0.1,0.1,0.9,0.9] );

x=1:0.1:10;
y=sin(x);
plot(x,y)


gcf设置成矩形

一般matlab绘出来图的框架(图形窗口)大都是正方形或者近似正方形的矩形,能不能画一些扁的矩形呢?

使用图形的position属性可以做到。

如set(gcf,‘unit’,‘normalized’,‘position’,[0.2,0.2,0.64,0.32]);的意思是:

对gcf的position进行设置。使其在屏幕上的显示位置是以(0.2,0.2)为原点,长0.64,宽0.32。同gca一样,仍然是左边界,下边界为0,

上边界,右边界为1。

另外,gcf的position也可以不是normalized的。如下面的例子:


x=-2pi:0.1:29i;
y=sin(x);
figure;
set (gcf,‘Position’,[500,500,500,500], ‘color’,‘w’) %大小设置plot(x,y,‘k-’) %节点位移图形输出
xlim([min(s(:,2)) max(s(:,2))])
grid on


其中,

[500,500,500,500]的意思为:原点的位置x,原点的位置y,宽,高,其坐标为points(详见下面),

保存图像

现在问题还存在:

如果仅设置position的话,打印的时候还是正方形。可以用下面的方法解决:

通常默认情况下,print命令输出图像为 8*5inches,无视屏幕显示尺寸
通过命令行修改的话有三步

1 设置paperposition为manual
set(gcf,‘PaperPositionMode’, ‘manual’)
[ auto | {manual} ]

2 设置paperunit
set(gcf,‘PaperUnits’,‘inches’)
[ {inches} | centimeters | normalized | points ]

3 设置paperposition
set(gcf,‘PaperPosition’,[left,bottom,width,height])

例如
set(gcf, ‘PaperPositionMode’, ‘manual’);
set(gcf, ‘PaperUnits’, ‘points’);
set(gcf, ‘PaperPosition’, [0 0 640 480]);

还有一个相关命令是papersize
paperposition 是placement,代表图像在paper(感觉就是屏幕screen的意思?)中的所处位置。left和bottom计算好,就可以使图像在paper中居中
papersize是纸张大小;position要比size小的

% set(gcf,‘position’,[80 100 800 600]) % 如果手动拖放,则不需要这一行命令
set(gcf, ‘PaperPositionMode’, ‘auto’) % Use screen size
print -dtiff myfigure

%%%%%%%%%%%%%%%%%%%%%% plot your figure before
%%%%%%%%%%%%%%%%%%%%%% figure resize
close all;
figure
x=0:0.1:10; 
y=sin(x);
plot(x,y,'b-')
legend('sin');
hold on;
z = cos(x);
plot(x,z,'r-')
legend('cos');

% set(gcf,'Position',[500 500 260 220]);%左下角位置,宽高,这里的260正好是7cm,适合半个word页面
% set(gca,'Position',[.13 .17 .80 .74]); %同样应用是在画图到word

set(gcf,'unit','normalized','position',[0.1,0.25,0.8,0.5]); %采用相对值设置,相对屏幕
set (gca,'position',[0.1,0.1,0.8,0.8] );
figure_FontSize=8;
set(get(gca,'XLabel'),'FontSize',figure_FontSize,'Vertical','top');
set(get(gca,'YLabel'),'FontSize',figure_FontSize,'Vertical','middle');
set(findobj('FontSize',10),'FontSize',figure_FontSize);
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1);
xlab = xlabel('x轴');
ylab = ylabel('y轴');
set(ylab,'Rotation',0);
title('图名');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%解释:
% set(gcf,'Position',[100 100 260 220]);这句是设置绘图的大小,不需要到word里再调整大小。我给的参数,图的大小是7cm
% set(gca,'Position',[.13 .17 .80 .74]);这句是设置xy轴在图片中占的比例,可能需要自己微调。
% figure_FontSize=8;
% set(get(gca,'XLabel'),'FontSize',figure_FontSize,'Vertical','top');
% set(get(gca,'YLabel'),'FontSize',figure_FontSize,'Vertical','middle');
% set(findobj('FontSize',10),'FontSize',figure_FontSize);这4句是将字体大小改为8号字,在小图里很清晰
% set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',2);这句是将线宽改为2

<think>好的,用户想在MATLAB中将子图的尺寸设置为正方形。首先,我需要回忆一下MATLAB调整图形和子图的相关命令。通常,figure和axes的属性控制图形的显示效果。 用户提到了subplot,这可能涉及多个子图的排列。要让每个子图显示为正方形,可能需要调整每个子图的位置和尺寸。我记得在MATLAB中,可以通过设置axes的'Position'属性来手动控制其位置和大小。例如,设置宽度和高度相等,但具体怎么操作呢? 另外,是否有一个快捷的命令可以直接将当前坐标轴调整为正方形?是的,可能用到axis square这个命令。但axis square的作用是调整坐标轴的比例,使x和y轴的长度相同,而图形的实际显示区域可能还受到figure窗口大小的影响。所以可能需要结合调整窗口尺寸和坐标轴位置。 还有一种情况是使用subplot时,每个子图的默认间距和边距可能导致即使坐标轴是正方形,整个子图的区域仍不是正方形。这时候可能需要更精细的控制,比如在创建子图后,获取其位置信息,然后重新计算并设置宽度和高度相等。 还需要考虑figure的Units属性,是否设置为像素或其他单位,这可能影响最终显示效果。另外,使用pbaspect或daspect来调整坐标轴的数据比例,但axis square可能更直接。 可能的方法步骤是:首先创建子图,然后对每个子图使用axis square,同时调整figure大小,使得每个子图的显示区域为正方形。或者,手动计算位置,设置每个axes的Position属性中的宽度和高度相同,并适当调整左右边距和上下边距。 例如,对于单个子图的情况,可以使用: figure; subplot(1,1,1); axis square; 但如果是多个子图,可能需要逐个处理每个axes对象。例如: figure; subplot(2,2,1); plot(...); axis square; subplot(2,2,2); plot(...); axis square; ... 但这样可能每个子图内部的坐标轴是正方形,而整个子图的排列可能不均匀。或者,使用更精确的Position设置: h = subplot(2,2,1); pos = get(h, 'Position'); pos(3) = pos(4); % 使宽度等于高度 set(h, 'Position', pos); 这种方法可能需要针对每个子图调整位置,尤其是当有多个子图时,需要考虑它们的相对位置,避免重叠。 另外,用户可能希望整个子图的区域(包括坐标轴周围的标签和标题)也是正方形,这时候调整起来更复杂,可能需要结合figure大小和子图的位置计算。 参考引用中提到,MATLAB支持调整图像配准和三维绘图,但用户的问题更侧重于图形布局。因此,可能的解决方案是结合使用axis square和手动调整位置,或者设置figure的适当比例。 总结可能的步骤: 1. 创建子图后,使用axis square使坐标轴比例成正方形。 2. 调整figure窗口大小,确保子图区域显示为正方形。 3. 或者,手动设置每个子图的Position属性,使宽度和高度相等。 需要验证这些方法的有效性,并考虑不同情况下的适用性。</think>在MATLAB中将`subplot`的子图设置为正方形可通过以下两种方法实现: --- ### 方法一:使用`axis square`调整坐标轴比例 1. **创建子图并绘图**: ```matlab subplot(2,2,1); % 示例:2x2子图中的第1个 plot(1:10, rand(1,10)); ``` 2. **设置当前坐标轴为正方形比例**: ```matlab axis square; % 使x轴与y轴长度相等 ``` 此命令会调整坐标轴的显示比例,但子图的实际尺寸仍受`figure`窗口大小影响。若需固定图形窗口比例,可结合`figure`的尺寸调整: ```matlab figure('Position', [100 100 800 800]); % 设置窗口为正方形(宽=高) ``` --- ### 方法二:手动设置子图位置 直接修改子图的`Position`属性,强制其宽度和高度相等: ```matlab h = subplot(2,2,1); % 获取子图句柄 pos = get(h, 'Position'); % 获取当前位置信息 pos(3) = pos(4); % 将宽度(pos(3))设为与高度(pos(4))相等 set(h, 'Position', pos); % 应用新位置 ``` 此方法需逐个调整子图,适用于需要精确控制布局的场景[^1]。 --- ### 效果对比 | 方法 | 特点 | |--------------------|----------------------------------------------------------------------| | `axis square` | 快速调整坐标轴比例,但依赖窗口大小 | | 手动设置`Position` | 精确控制子图尺寸,需计算位置避免重叠 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值