Make subplot 'stick' to each other

8 vues (au cours des 30 derniers jours)
Hannah
Hannah le 21 Avr 2022
Commenté : Hannah le 26 Avr 2022
Hi,
I am making a figure with several subplots (maps, specifically). Setting 'Position' will make each subplot very far away from each other since it is setting the outter boundary position. I tried using 'InnerPosition but it seems not working (don't know why, maybe because they are maps?).
How could I make the subplots stick to eachother? My code is also attached below.
fw = 0.5; % figure width
fh = 0.5 ; % figure height
L1 = 0; % row 1 from bottom;
L2 = L1+fh; % row 2 from bottom;
C1 = 0; % column from left
C2 = C1+fw; % column from left
Positions =[C1 L2 fw fh;
C2 L2 fw fh;
C1 L1 fw fh;
C2 L1 fw fh];
cbh = 0.015;
cbw = fw-0.1;
fhi = fw * (latmax-latmin)/(lonmax-lonmin) ; % inner figure height
ver_edge = (0.5-fhi)/2;
cbpos =[C1+0.05 1-0.5*ver_edge cbw cbh;
C2+0.05 1-0.5*ver_edge cbw cbh;
C1+0.05 L1+0.5*ver_edge cbw cbh;
C2+0.05 L1+0.5*ver_edge cbw cbh];
for ps = 1:4
subplot('Position',Positions(ps,:))
% skip other settings
cb1=colorbar('horizontal', 'fontsize',fz, 'fontweight', 'bold','Position',cbpos(ps,:)); % color bar definition; for later use
end

Réponse acceptée

Hannah
Hannah le 25 Avr 2022
Okay I see what is the problem. The aspect ratio (figure height / figure width) in worldmap is
((latmax-latmin)/180 )/((lonmax-lonmin)/360)
While what I did is (latmax-latmin)/(lonmax-lonmin). This doubled the aspect ratio therefore leaved lots of white space. Below is the corrected layout I got (without putting any data yet):
  2 commentaires
the cyclist
the cyclist le 25 Avr 2022
I'm glad it worked out
Hannah
Hannah le 26 Avr 2022
Thanks for helping!!

Connectez-vous pour commenter.

Plus de réponses (1)

the cyclist
the cyclist le 21 Avr 2022
Modifié(e) : the cyclist le 21 Avr 2022
It might be easier to do what you want with the newer tiledlayout command for making subplots.
  4 commentaires
Hannah
Hannah le 22 Avr 2022
Hi there,
Yea I didn't post the entire code since it is super long. I just generated something that can run:
latmin = -45;
latmax = 65;
lonmin = -160;
lonmax = 168;
fw = 0.5; % figure width
fh = 0.5 ; % figure height
L1 = 0; % row 1 from bottom;
L2 = L1+fh; % row 2 from bottom;
C1 = 0; % column from left
C2 = C1+fw; % column from left
Positions =[C1 L2 fw fh;
C2 L2 fw fh;
C1 L1 fw fh;
C2 L1 fw fh];
cbh = 0.015;
cbw = fw-0.1;
fhi = fw * (latmax-latmin)/(lonmax-lonmin) ; % inner figure height
ver_edge = (0.5-fhi)/2;
cbpos =[C1+0.05 1-0.5*ver_edge cbw cbh;
C2+0.05 1-0.5*ver_edge cbw cbh;
C1+0.05 L1+0.5*ver_edge cbw cbh;
C2+0.05 L1+0.5*ver_edge cbw cbh];
fz = 10; % font size
for ps = 1:4
subplot('Position',Positions(ps,:))
worldmap([latmin latmax],[lonmin lonmax]);
setm(gca,'Grid','off','MapProjection','miller','parallellabel','off','meridianlabel','off')
% skip other settings
cb1=colorbar('horizontal', 'fontsize',fz, 'fontweight', 'bold','Position',cbpos(ps,:)); % color bar definition; for later use
end
So I usually adjust 'Position' parameter. But it never allows me to put all the subplots stick to each other. Because my maps are not perfect square, there is always space between the top and bottom panel. Do you see how to remove it?
Hannah
the cyclist
the cyclist le 22 Avr 2022
It's definitely an issue with the map. I swapped in a normal plot, and it fills the space.
I don't have any experience with using worldmap, but it could be that a certain aspect ratio is enforced (perhaps because of the particular projection). That makes sense to me, because if you "stretch" only one dimension, you will no long obey the constraints of the projection.
latmin = -45;
latmax = 65;
lonmin = -160;
lonmax = 168;
fw = 0.5; % figure width
fh = 0.5 ; % figure height
L1 = 0; % row 1 from bottom;
L2 = L1+fh; % row 2 from bottom;
C1 = 0; % column from left
C2 = C1+fw; % column from left
Positions =[C1 L2 fw fh;
C2 L2 fw fh;
C1 L1 fw fh;
C2 L1 fw fh];
cbh = 0.015;
cbw = fw-0.1;
fhi = fw * (latmax-latmin)/(lonmax-lonmin) ; % inner figure height
ver_edge = (0.5-fhi)/2;
cbpos =[C1+0.05 1-0.5*ver_edge cbw cbh;
C2+0.05 1-0.5*ver_edge cbw cbh;
C1+0.05 L1+0.5*ver_edge cbw cbh;
C2+0.05 L1+0.5*ver_edge cbw cbh];
fz = 10; % font size
for ps = 1:4
subplot('Position',Positions(ps,:))
plot(rand(5))
% skip other settings
cb1=colorbar('horizontal', 'fontsize',fz, 'fontweight', 'bold','Position',cbpos(ps,:)); % color bar definition; for later use
end

Connectez-vous pour commenter.

Catégories

En savoir plus sur 802.11ax (Wi-Fi 6) dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by