如何在MATLAB的子图中对齐图形/图形?

Sla*_*lav 5 matlab subplot

我有3个对象(一张照片和2个地块)可放在一个图形上的子图中。它看起来应该像这样:

图片

但请注意,照片不应是正方形,而是矩形。我试图通过这种方式来实现(可在此处找到Matlab:当其中一个子图包含一个颜色条时,如何对齐子图的轴?):

main=subplot(4,4,[5,6,7,9,10,11,13,14,15])  %photo
imagesc(im); 
axis('image')  
pion=subplot(4,4,[8,12,16]); %right plot (rotated)
view(90, 90)
plot(ypion,Ppion,'.k');
poz=subplot(4,4,1:3); %upper plot
plot(xpoz,Ppoz,'.k');

pos1=get(poz,'Position')
pos2=get(main,'Position')
pos3=get(pion,'Position')

pos1(3) = pos2(3); %width for the upper plot
set(poz,'Position',pos1)
pos3(4) = pos2(4); %height for the right plot
set(pion,'Position',pos3) 
Run Code Online (Sandbox Code Playgroud)

我得到的是这样的: 图片

如何强制上部图的宽度作为照片本身(而不是照片子图)?设置子图的相等宽度无效,因为照片未填充子图区域。

Rod*_*uis 4

命令axis image调整图像轴比例。所以,原则上,如果你将两个地块的容积率调整为相同的比例,它就会达到你想要的效果。

有一个警告;图像本身比图宽或高 3 倍,因为您已将其绘制在 3x3 子图中,而顶部图为 1x3,右侧图为 3x1。因此,您必须将图的x或比率除以 3。y

一些示例代码:

clc, clf

% generate some bogus data

ypion = rand(500,1);
Ppion = 450*rand(500,1);

xpoz  = rand(500,1);
Ppoz  = 450*rand(500,1);

% Load photo
photoSub = subplot(4,4,[5,6,7,9,10,11,13,14,15]);
load mandrill
photo = imagesc([X,X]);
colormap(map)

axis image 

photoAxs = gca;
photoAxsRatio = get(photoAxs,'PlotBoxAspectRatio')

% right plot 
subplot(4,4,[8,12,16]); 
plot(Ppion,ypion,'k.');
rightAxs = gca;
axis tight

% upper plot
subplot(4,4,[1 2 3]);
plot(xpoz,Ppoz,'k.');
topAxs = gca;
axis tight


% adjust ratios
topAxsRatio = photoAxsRatio;
topAxsRatio(2) = photoAxsRatio(2)/3.8;    % NOTE: not exactly 3...
set(topAxs,'PlotBoxAspectRatio', topAxsRatio)

rightAxsRatio = photoAxsRatio;
rightAxsRatio(1) = photoAxsRatio(1)/3.6;  % NOTE: not exactly 3...
set(rightAxs,'PlotBoxAspectRatio', rightAxsRatio)
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果:

并排

只是为了测试,更改photo = imagesc([X,X]);photo = imagesc([X;X]);给出:

上下

请注意,我没有将比率精确地除以 3 ;只有当我使用接近 4 的因子时,结果才正常。我不知道为什么会这样;AFAIK,因子 3 应该可以解决问题......

哦,好吧,至少你现在有东西可以做了:)