我有 3 个对象(一张照片和 2 个绘图)要放入一个图的子图中。它应该看起来像这样:
但是正如人们所注意到的,照片不应该是方形的,而是矩形的。我试着这样做(在这里找到 Matlab: How to align the axes of subplots when one of them contains a colorbar? ):
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)
我得到的是这样的:
如何强制上图的宽度与照片本身相同(而不是照片子图)?设置等宽的子图不起作用,因为照片没有填满子图区域。
最佳答案
命令axis image
调整图像轴比例。所以,原则上,如果你把两个地 block 的地积比例调整到相同的比例,它就会如你所愿。
有一个警告;该图像本质上比图宽或高 3 倍,因为您已经将它绘制在 3x3 子图中,而顶部图为 1x3,右侧图为 3x1。因此,您必须将绘图的 x
或 y
比率除以 3。
一些示例代码:
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)
结果如下:
只是为了测试,将 photo = imagesc([X,X]);
更改为 photo = imagesc([X;X]);
给出了这个:
请注意,我没有将比率除以 3正好;如果我使用接近 4 的因子,它只会出来 OK。我不知道为什么会这样; AFAIK,因子 3 应该可以解决问题...
哦,好吧,至少你现在有东西可以用了:)
关于matlab - 如何在 MATLAB 中对齐子图中的绘图/图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808143/