我有以下代码来定位一些子图:
fig = figure;
fig.Units = 'centimeters';
fig.Position(3:4) = [25 25];
plotPositions = [ 3, 21, 7, 7;
12, 21, 7, 7;
];
nPlots=length(plotPositions); % shorthand variable for convenience
hAx=zeros(nPlots,1); % preallocate array for axes/subplot handles
for i = 1:length(plotPositions)
plotHandle = subplot(3, 2, i);
plotHandle.Units = 'centimeters';
plotHandle.Position = plotPositions(i,:);
hAx(i)=subplot(3, 2, i);
axis(hAx(i),[ -300 300 0 150]); %
end
如果我使用
plotPositions = [ 3, 21, 7, 7;
12, 21, 7, 7;
3, 12, 7, 7;
12, 12, 7, 7;
3, 3, 7, 7;
12, 3, 7, 7];
它有效,但如果使用
plotPositions = [ 3, 21, 7, 7;
12, 21, 7, 7;
];
它不起作用,我收到错误:
Matrix dimensions must agree.
Index exceeds matrix dimensions.
发生了什么事?
答案 0 :(得分:1)
您不应该使用函数length
,而是使用函数size(...,1)
来计算plotPositions
的行数。 length
实际上是max(size(vec))
,在"工作"中6
(行数,正确)大小写,以及4
(列的数量)在非工作状态中。
因此,在2 nd 的情况下,你实际上是在尝试访问"不存在"行,所以MATLAB抱怨......