如何修改子图位置以防止它们相互覆盖



我正在尝试创建一个世界地图的子图(6个图(,我正在将选定的形状文件写入其中。我的问题是我的子情节的位置:它们相互覆盖。我从stackoverflow上的其他类似问题中了解到,这是因为轴在某种程度上重叠。但我认为我已经创建了他们将只是"并排"的位置(见下面的代码(。我试着让轴透明,但这似乎没有帮助。我的问题是:如何修改绘图位置,使它们不会相互覆盖?

我使用的代码(去掉了shapefile的东西(是:

clc;
clear all;
%First create the positions for the subplots
handle1=subplot(3,2,1);
H1=get(handle1,'position');
h1pos=H1+[-0.1,-0.1,0.1,0.1]; subplot(2,2,1,'Position',h1pos)
hold all
handle2=subplot(3,2,2);
H2=get(handle2,'position');
h2pos=H2+[-0.1,-0.1,0.1,0.1]; subplot(2,2,1,'Position',h2pos)
handle3=subplot(3,2,3);
H3=get(handle3,'position');
h3pos=H3+[-0.1,-0.1,0.1,0.1]; subplot(2,2,1,'Position',h3pos)
handle4=subplot(3,2,4);
H4=get(handle4,'position');
h4pos=H4+[-0.1,-0.1,0.1,0.1]; subplot(2,2,1,'Position',h4pos)
handle5=subplot(3,2,5);
H5=get(handle5,'position');
h5pos=H5+[-0.1,-0.1,0.1,0.1]; subplot(2,2,1,'Position',h5pos)
handle6=subplot(3,2,6);
H6=get(handle6,'position');
h6pos=H6+[-0.1,-0.1,0.1,0.1]; subplot(2,2,1,'Position',h6pos)
subplot(3,2,1,'Position',h1pos)
text(0.02,0.98,'(a)','Units', 'Normalized', 'VerticalAlignment', 'Top');
%handle1=subplot(2,2,1);
%H1=get(handle1,'position');
%h1pos=H1+[-0.1,-0.1,0.1,0.1]; subplot(2,2,1,'Position',h1pos)
h=worldmap('world')
%     borders('countries', 'Color', 'black')
subplot(3,2,2,'Position',h2pos)
text(0.02,0.98,'(b)','Units', 'Normalized', 'VerticalAlignment', 'Top')
h=worldmap('world')
%     borders('countries', 'Color', 'black') 
subplot(3,2,3,'Position',h3pos)
text(0.02,0.98,'(c)','Units', 'Normalized', 'VerticalAlignment', 'Top')
h=worldmap('world')
%     borders('countries', 'Color', 'black') 
subplot(3,2,4,'Position',h4pos)
text(0.02,0.98,'(d)','Units', 'Normalized', 'VerticalAlignment', 'Top')
h=worldmap('world')
%     borders('countries', 'Color', 'black') 
subplot(3,2,5,'Position',h5pos)
text(0.02,0.98,'(e)','Units', 'Normalized', 'VerticalAlignment', 'Top')
h=worldmap('world')
subplot(3,2,6,'Position',h6pos)
text(0.02,0.98,'(f)','Units', 'Normalized', 'VerticalAlignment', 'Top')
h=worldmap('world')
%     borders('countries', 'Color', 'black') 
%     borders('countries', 'Color', 'black') 

MATLAB的position矢量定义为[left bottom width height],在您的情况下,如果您查看h1pos和h3pos,它们是

h1pos = [0.0300    0.6093    0.4347    0.3157]
h3pos = [0.0300    0.3096    0.4347    0.3157]

h1pos(2) - h3pos(2) = 0.2996 < 0.3157,即轴之间的距离小于h1的高度,因此存在重叠,导致"子地块"删除轴。

为了解决这个问题,你可以更仔细地计算你的位置,要么留出更多的空间,要么降低高度(将高度降低到0.05即可(。您可以通过执行类似handle6.Position = [0.0300 0.3096 0.4347 0.3157];的操作来修改仓位属性

另外,你可以考虑通过减少一些冗余来改进你的编码风格。下面是一个代码片段,可以完成的工作

offset = [-0.05,-0.05,0.1,0.05];
pos = zeros(6, 4);
for ii = 1:6
h = subplot(3,2,ii);
pos(ii, :) = h.Position;
end
for ii = 1:6
subplot('Position',pos(ii,:) + offset);
text(0.02,0.98,['(' char('a'+ii-1) ')'],'Units', 'Normalized', 'VerticalAlignment', 'Top');
h=worldmap('world');
end

subplot本身将创建不重叠的轴,但将删除任何重叠的现有轴。因此,将六个subplot调用放在第一位,并在最后更改它们的位置。使用set(handle1,'Position',h1pos)而不是subplot(...)来更改位置。也可以使用axes创建轴对象,而不删除任何现有的重叠轴。由于您无论如何都是手动设置位置,因此subplot命令对您没有任何优势。

您还可以考虑使用新的tiledlayout功能。

相关内容

  • 没有找到相关文章

最新更新