简体   繁体   English

如何对齐MATLAB子图?

[英]How to align MATLAB subplots?

My MATLAB subplots are not aligned perfectly, see the green rectangle in figure below 我的MATLAB子图未完全对齐,请参见下图中的绿色矩形 在此处输入图片说明 . How to avoid this shift? 如何避免这种转变?

Here is what I am trying 这是我正在尝试的

clear all;
clc;

RF=RF_data(:,2:end);

figure

subplot(3,4,1)

pos_pre = 1.3:1:3.3;    % for positioning

boxplot(RF(2:71,[45,47,46]),...
    'colors','b','positions',pos_pre,'width',0.18,...
    'symbol', 'bd', 'OutlierSize',3);
set(gca,'XTickLabel',{' '}) 
hold on  

pos_post = 1.55:1:3.55;   % Ignore this comment

boxplot(RF(72:end,[45,47,46]),'colors','r',...
    'positions',pos_post,'width',0.18,'symbol', 'rd','OutlierSize',3,...
    'factorseparator',1); 

set(gca,'XTick',1.5:1:3.5)  
set(gca,'XTickLabel',{'10a', '10b', '10c'}, 'FontSize', 7)

X = get(gca,'XLim');  
Y = get(gca,'YLim');
hold off 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

subplot(3,4,2)

pos_pre = 1.3:1:3.3;   % Ignore this comment

boxplot(RF(2:71,[17,16,15]),...
    'colors','b','positions',pos_pre,'width',0.18,...
    'symbol', 'bd', 'OutlierSize',3);
set(gca,'XTickLabel',{' '})  
hold on  

pos_post = 1.55:1:3.55;  % Ignore this comment

boxplot(RF(72:end,[17,16,15]),'colors','r',...
    'positions',pos_post,'width',0.18,'symbol', 'rd','OutlierSize',3,...
    'factorseparator',1); 

set(gca,'XTick',1.5:1:3.5) 
set(gca,'XTickLabel',{'7a', '7b', '7c'}, 'FontSize', 7) 

hold off 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

subplot(3,4,3)

pos_pre = 1.3:1:3.3;  % Ignore this comment

boxplot(RF(2:71,[54, 53, 52]),'colors','b',...
    'positions',pos_pre,'width',0.18,...
    'symbol', 'bd', 'OutlierSize',3);
set(gca,'XTickLabel',{' '})  
hold on  

pos_post = 1.55:1:3.55;  

boxplot(RF(72:end,[54, 53, 52]),'colors','r',...
    'positions',pos_post,'width',0.18,'symbol', 'rd','OutlierSize',3,...
    'factorseparator',1); 

set(gca,'XTick',1.5:1:3.5)  
set(gca,'XTickLabel',{'6a', '6b', '6c', '6d', '6e', '6f', '6g'}, 'FontSize', 7)

hold off 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

subplot(3,4,4)

pos_pre = 1.3:1:3.3;  

boxplot(RF(2:71,[76,75,74]),...
    'colors','b','positions',pos_pre,'width',0.18,...
    'symbol', 'bd', 'OutlierSize',3);
set(gca,'XTickLabel',{' '})  
hold on  

pos_post = 1.55:1:3.55;  

boxplot(RF(72:end,[76,75,74]),'colors','r',...
    'positions',pos_post,'width',0.18,'symbol', 'rd','OutlierSize',3,...
    'factorseparator',1); 

set(gca,'XTick',1.5:1:3.5)  
set(gca,'XTickLabel',{'5a', '5b', '5c', '5d', '5e', '5f', '5g', '5h'}, 'FontSize', 7)

X = get(gca,'XLim');  
Y = get(gca,'YLim');
hold off 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(3,4,(5:6))

pos_pre = 1.3:1:8.3;  

boxplot(RF(2:71,[32,31,30,50,62,85,86,34]),...
    'colors','b','positions',pos_pre,'width',0.18,...
    'symbol', 'bd', 'OutlierSize',3);
set(gca,'XTickLabel',{' '})  
hold on  

pos_post = 1.55:1:8.55;  

boxplot(RF(72:end,[32,31,30,50,62,85,86,34]),'colors','r',...
    'positions',pos_post,'width',0.18,'symbol', 'rd','OutlierSize',3,...
    'factorseparator',1); 

set(gca,'XTick',1.5:1:8.5)
set(gca,'XTickLabel',{'5a', '5b', '5c', '5d', '5e', '5f', '5g', '5h'}, 'FontSize', 7)

hold off 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

subplot(3,4,(7:8))

pos_pre = 1.3:1:7.3;  

boxplot(RF(2:71,[12, 11, 42, 41, 40, 79, 78]),...
    'colors','b','positions',pos_pre,'width',0.18,...
    'symbol', 'bd', 'OutlierSize',3);
set(gca,'XTickLabel',{' '})  
hold on  

pos_post = 1.55:1:7.55;  

boxplot(RF(72:end,[12, 11, 42, 41, 40, 79, 78]),'colors','r',...
    'positions',pos_post,'width',0.18,'symbol', 'rd','OutlierSize',3,...
    'factorseparator',1); 

set(gca,'XTick',1.5:1:7.5) 
set(gca,'XTickLabel',{'6a', '6b', '6c', '6d', '6e', '6f', '6g'}, 'FontSize', 7)

hold off 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(3,4,(9:12))

pos_pre = 1.3:1:19.3;  

boxplot(RF(2:71,[1,63,89,88,87,27,80,33,26,28,39,9,21,72,77,19,18,38,5]),...
    'colors','b','positions',pos_pre,'width',0.18,...
    'symbol', 'bd', 'OutlierSize',3);
set(gca,'XTickLabel',{' '})  
hold on  

pos_post = 1.55:1:19.55;  

boxplot(RF(72:end,[1,63,89,88,87,27,80,33,26,28,39,9,21,72,7,19,18,38,5]),...
    'colors','r','positions',pos_post,'width',0.18,'symbol', 'rd',...
    'OutlierSize',3,'factorseparator',1); 

set(gca,'XTick',1.5:1:19.5)
set(gca,'XTickLabel',{'2a', '2b', '2c', '2d', '2e', '2f', '2g','2e','2f','2g','2h',...
    '2i','2j','2k','2l','2m','2n','2o','2p','2q','2r','2s'}, 'FontSize', 7)


X = get(gca,'XLim');  
Y = get(gca,'YLim');
hold off 

text('Position',[0.85*X(1,2), 0.9*Y(1,2)],'String','1901-1970',...
    'color', 'b', 'FontWeight', 'bold', 'FontSize', 8) 

text('Position',[0.85*X(1,2), 0.8*Y(1,2)],'String','1971-2013',...
    'color', 'r', 'FontWeight', 'bold', 'FontSize', 8) 

%%
disp('Done')

It's asking to add some more detail, so I am just writing random stuff. 它要求添加更多细节,所以我只是在写随机的东西。

I don't see a problem in this example: 在此示例中,我没有看到任何问题:

% first row
subplot(3,4,1), plot(cumsum(randn(100,1)))
subplot(3,4,2), plot(cumsum(randn(100,1)))
subplot(3,4,3), plot(cumsum(randn(100,1)))
subplot(3,4,4), plot(cumsum(randn(100,1)))

% second row
subplot(3,2,3), plot(cumsum(randn(100,1)))
subplot(3,2,4), plot(cumsum(randn(100,1)))

% third row
subplot(3,1,3), plot(cumsum(randn(100,1)))

子图


EDIT: 编辑:

Using the code you posed, a quick solution is to manually adjust the axes positions to be aligned. 使用您编写的代码,一种快速的解决方案是手动调整要对齐的轴位置。

First you need to store the handles of all subplot. 首先,您需要存储所有子图的句柄。 So add the followings to your script: 因此,将以下内容添加到脚本中:

figure
h = zeros(1,7);

h(1) = subplot(3,4,1);
% ... [snip] ...

h(2) = subplot(3,4,2);
% ... [snip] ...

% ...

h(7) = subplot(3,4,(9:12));
% ... [snip] ...

Then you can do something like this: 然后,您可以执行以下操作:

% positions of axes on the left
positions = cell2mat(get(h([1 5 7]), 'Position'));

% minimum x-position
x = min(positions(:,1));

% set them to be left aligned, and just the width accordingly
for i=[1 5 7]
    pos = get(h(i), 'Position');
    set(h(i), 'Position',[x, pos(2), pos(3) + (pos(1) - x), pos(4)]);
end

Here is the result I get (I used random data RF_data = rand(100,100); to run the script): 这是我得到的结果(我使用随机数据RF_data = rand(100,100);运行脚本):

箱线图

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM