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

标签 matlab subplot

我有 3 个对象(一张照片和 2 个绘图)要放入一个图的子图中。它应该看起来像这样:

image

但是正如人们所注意到的,照片不应该是方形的,而是矩形的。我试着这样做(在这里找到 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) 

我得到的是这样的: image

如何强制上图的宽度与照片本身相同(而不是照片子图)?设置等宽的子图不起作用,因为照片没有填满子图区域。

最佳答案

命令axis image 调整图像轴比例。所以,原则上,如果你把两个地 block 的地积比例调整到相同的比例,它就会如你所愿。

有一个警告;该图像本质上比图宽或高 3 倍,因为您已经将它绘制在 3x3 子图中,而顶部图为 1x3,右侧图为 3x1。因此,您必须将绘图的 xy 比率除以 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)

结果如下:

Side by Side

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

over-under

请注意,我没有将比率除以 3正好;如果我使用接近 4 的因子,它只会出来 OK。我不知道为什么会这样; AFAIK,因子 3 应该可以解决问题...

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

关于matlab - 如何在 MATLAB 中对齐子图中的绘图/图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808143/

相关文章:

matlab - MatLab 学生版图像处理的任何限制

string - 逐行分析由推文组成的 .txt 文件

r - 使用 ggarrange 或 grid.arrange 排列绘图列表和多行文本

python - 子图中的 Seaborn 热图 - 对齐 x 轴

python - OpenCV (Python) 视频子图

Python Matplotlib : Splitting one Large Graph into several Sub-Graphs (Subplot)

legend - 使用带有黄砖的子图并丢失图例和标题时的问题

function - pol2cart matlab 不提供 [X Y]

string - 在 MATLAB 中将数字转换为元胞数组中的字符串

python - 对视频进行二次采样以保存每 N 帧