Help with making square and symmetric subplots

Dear all,
I am trying to plot 6 graphs in a single plot using subplot function. I would like them to look in a square shape with same axes lengths. However, this is what I get (see attached figure). I have not made any arrangements in my code on subplots.
The code:
figure(3)
subplot(6,2,1,'align');
title(['Episode: ',int2str(i),' epsilon: ',num2str(epsilon)]);
plot(xpoints,ypoints,'Color',[0,0.7,0.9]);
pbaspect([2 2 1]);
xlabel('r');
ylabel('x');
drawnow
subplot(6,2,2,'align');
plot(xpoints,zpoints, 'Color','r');
pbaspect([1 1 1]);
xlabel('r');
ylabel('y');
drawnow
subplot(6,2,3,'align');
plot(xpoints,lpoints, 'Color','r');
pbaspect([1 1 1]);
xlabel('r');
ylabel('z');
drawnow
subplot(6,2,4,'align');
plot(xpoints,convpoints, 'Color','r');
pbaspect([1 1 1]);
xlabel('r');
ylabel('m');
drawnow
subplot(6,2,5,'align');
plot(xpoints,explore, 'Color','b');
pbaspect([1 1 1]);
xlabel(r');
ylabel('n');
drawnow
subplot(6,2,6,'align');
plot(xpoints,gpoints, 'Color','r');
pbaspect([1 1 1]);
xlabel('r');
ylabel('k');
drawnow
Really appreciate it if someone can help with this.
Kind Regards,
Kyana

 Accepted Answer

Try the following code, you can use the Position property of each axis to control its position, width, and height. More Information here.
subplot(321)
subplot(322)
subplot(323)
subplot(324)
subplot(325)
subplot(326)
f = gcf;
f.Units = 'pixels';
f.Position = [100 100 700 700];
for i=f.Children'
i.Position(3:4) = 0.25;
end
You must note that aspect ratio also depends on resizing of the figure window.

3 Comments

Hi Ameer,
First, thanks for your answer. This is now the figure that I get (see attached). This is already much better of the original figure. However, the upper graphs seem attached to the top of the figure, while I would like them to be symmetrically distributed in the figure. Do you have a solution for this?
Try these settings,
f = gcf;
ax = f.Children;
f.Units = 'pixels';
f.Position = [100 100 700 700];
for i=1:length(ax)
if(mod(i, 2) == 1)
ax(i).Position(1:2) = [0.6 0.1+floor((i-1)/2)*0.3];
else
ax(i).Position(1:2) = [0.1 0.1+floor((i-1)/2)*0.3];
end
ax(i).Position(3:4) = 0.23;
end
You may need to experiment with ax(i).Position values because end result also depends on your screen resolution. Your figure looks like this on my screen after these settings.
great! this fixed my problem!

Sign in to comment.

More Answers (0)

Asked:

on 26 Apr 2018

Commented:

on 9 Jan 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!