Formatting Subplots in MATLAB
57 views (last 30 days)
Show older comments
I am trying to create a series of vertically stacked plots for a scientific publication using the same x-axis. With regards to this task, I have a couple questions.
1) Generating the subplots according to the MATLAB defaults, there is always good bit of space between each individual plot in the group. I am trying to get each plot to sit right on the top of the others, but all of the things I have tried have not worked. From looking around, I believe I need to set height space between the subplots, but I could be wrong. I need tidy way to reduce and/or eliminate the space between the subplots. Current figure and the a figure I am trying the replicate the style found below.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/156367/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/156368/image.jpeg)
2) Also, does anyone know why the far right y-axis on the bottom plot does not line up with the that of the top plot? Would setting sizes for the plots in the code eliminate this problem? Current code is attached as it is pretty long.
Answers (2)
Alvi Newaz
on 14 Sep 2016
Hi you can get the position of bottom subplot using p = get(subplot,'Position'). This is a 4-element vector [left, bottom, width, height]. So you can get the upper edge of the second plot by adding p(2) and p(4). Then start first plot from that position.
Example code:
a = [1:10];
b = [1:10];
figure(1)
h1 = subplot(2,1,1);
scatter(a,b);
ylabel('data1')
set(gca,'XTickLabel',[]);%remove Xaxis tick labels for h1
h2 = subplot(2,1,2);
scatter(a,b);
xlabel('x axis data');
ylabel('data2')
p1 = get(h1, 'Position');
p2 = get(h2, 'Position');
p1(2) = p2(2)+p2(4);%change bottom starting point of h1
set(h1, 'pos', p1);%set h1 position
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/175042/image.png)
0 Comments
Geoff Hayes
on 14 Sep 2016
Try manipulating the position of the second subplot. For example, you can get the current position value of the second subplot as
% get the handle to the subplot
hAxes2 = subplot(2,1,2);
% get the current position
axes2Pos = get(hAxes2, 'Position');
% move the subplot (axes) up
axes2Pos(2) = axes2Pos(2)*2;
% reset the new position
set(hAxes2,'Position',axes2Pos);
The above is just an example. The position array should be a 1x4 with the x coordinate of the bottom left corner of the axes, the y coordinate of the bottom left corner of the axes, the width of the axes, and the height. These values may or may not be normalized. As we want to move this axes up, we just increase the y-coordinate (in this case, by two).
Try the above and see what happens!
3 Comments
Geoff Hayes
on 19 Sep 2016
I can't seem to reproduce that problem with my version of MATLAB (r2014a) so perhaps the code I'm using is somewhat different from yours. Can you post a sample of code and the steps that illustrate the problem?
See Also
Categories
Find more on Line 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!