How can I increase the vertical size of subplots?
    22 views (last 30 days)
  
       Show older comments
    
Hi,
I'm trying to increase the verticle size of my subplots, but I'm having no luck. Can someone please let me know where I've gone wrong.
My code is:
suplotTitle = {'0.4mA', '0.6mA', '0.8mA', '1.2mA', '1.6mA'}; 
f1=figure('position', [10, 10, 800, 1000]);
for ii=1:5
    subplot(6,2,2*ii-1);
    b1 = bar(conRR(2:end,1), conRR(2:end,ii+1));
    b1.FaceColor = '#D95319';
    b1.EdgeColor = 'none';
    xticks(1:1:16);
    ylim([0 80]);
    title(suplotTitle{ii})
    set(gca, 'FontSize', 10);
    box off
    if ii < 5
        set(gca,'XTick', []);
    end
end
subplot(6,2,5), ylabel('Respiratory Rate (BPM)')
subplot(6,2,9), xlabel('Number of rats (N)')
for ii=1:5
    s2 = subplot(6,2,2*ii);
    b2 = bar(b9RR(2:end,1), b9RR(2:end,ii+1));
    b2.FaceColor = '#0072BD';
    b2.EdgeColor = 'none';
    xticks(1:1:16);
    ylim([0 80]);
    title(suplotTitle{ii})
    box off
    set(gca, 'FontSize', 10);
    if ii < 5
        set(gca,'XTick', []);
    end 
end
subplot(6,2,6), ylabel('Respiratory Rate (BPM)');
subplot(6,2,10), xlabel('Number of rats (N)');
%Add legend
hL = subplot(6,2,[11,12]);
poshL = get(hL,'position');    
lgd = legend(hL,[b1,b2],'Control','Intervention');
legend box off;
set(lgd,'position',poshL,'Orientation','horizontal', 'FontSize', 12);
axis(hL,'off');                 % Turning its axis off
%Add main title
t = sgtitle('Respiratory Rate');
t.FontSize = 15;
t.FontWeight = 'bold';
At the moment my Figure looks like this:

Thanks in advance.
2 Comments
  Paresh yeole
      
 on 8 Jun 2020
				Try using :
set(gca,'Units','centimeters','Position', [0 0 7.5 6])
for each subplot.
Accepted Answer
  Star Strider
      
      
 on 8 Jun 2020
        I got this to work with the previous code, however I couldn’t get it to work with the code you posted.  You will need to make the appropriate adjustments to do that.  
The change is to add these two lines in each looop: 
    PosVec = Ax.Position;
    Ax.Position = PosVec+[0 -0.005 0 0.005]; 
and after both loops: 
f1.Position = f1.Position+[0 -300 0 300];
That should get you started.  
The (Revised) Code — 
conRR = [(0:10).' rand(11,5)*80];                               % Create Matrix
b9RR = [(0:10).' rand(11,5)*80];                                % Create Matrix
suplotTitle = {'0.4mA', '0.6mA', '0.8mA', '1.2mA', '1.6mA'}; 
f1=figure
for ii=1:5
    Ax = subplot(5,2,2*ii-1);
    b1 = bar(conRR(2:end,1), conRR(2:end,ii+1));
    b1.FaceColor = '#D95319';
    b1.EdgeColor = 'none';
    xticks(1:1:16);
    ylim([0 80]);
    title(suplotTitle{ii})
    PosVec = Ax.Position;
    Ax.Position = PosVec+[0 -0.005 0 0.005];
end
for ii=1:5
    Ax = subplot(5,2,2*ii);
    b2 = bar(b9RR(2:end,1), b9RR(2:end,ii+1));
    b2.FaceColor = '#0072BD';
    b2.EdgeColor = 'none';
    xticks(1:1:16);
    ylim([0 80]);
    title(suplotTitle{ii})
    PosVec = Ax.Position;
    Ax.Position = PosVec+[0 -0.005 0 0.005];
end
f1.Position = f1.Position+[0 -300 0 300];
The Plots — 
Original: 

This code: 

2 Comments
More Answers (1)
  Bjorn Gustavsson
      
 on 8 Jun 2020
        You can manually adjust the subplot's axes position like this:
sph = subplot(3,2,1);
dx0 = 0;
dy0 = -0.05;
dwithx = 0.0;
dwithy = 0.1;
set(sph,'position',get(sph,'position')+[dx0,dy0,dwithx,dwithy])
You will have to modify this heavily, but the tweaking shouldn't be too bad for one figure - and might be "impossible" to get right for an absolutely general sub-plots configuration.
There are a number of file-exchange contributions that handles this, or different parts of this:
gettightsubplothandles, tight_subplot, panel, tight-subplot-with-units-in-centimeter, border-less-tight-subplot.
Hopfully you find something useful.
HTH
See Also
Categories
				Find more on Discrete Data Plots in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!