Filter löschen
Filter löschen

Equally spaced figures in tiledlayout environment

4 Ansichten (letzte 30 Tage)
Richard Wood
Richard Wood am 8 Dez. 2023
Bearbeitet: Adam Danz am 8 Dez. 2023
Hello everyone
I have generated the following image through the tiledlayout environment:
which I have generated through the following code:
u1=figure('visible','off','units','pixels','position',[0 0 1920 1080]);
tiledlayout("horizontal");
nexttile;
uimagesc(x,y,modulus');
Unrecognized function or variable 'x'.
axis xy;
hold off;
colormap;
box on;
clr1=colorbar;
set(clr1,'TickLabelInterpreter','latex');
xlabel('$x$-{\it th} spatial direction, $x$','FontSize',18,'interpreter','latex');
ylabel('$y$-{\it th} spatial direction, $y$','FontSize',18,'interpreter','latex');
ylabel(clr1,'Modulus, $\mathbf{H}$','Interpreter','Latex','FontSize',19);
clim([0 max(max(abs(modulus)))]);
xlim([0 50]);
xticks([0:10:50]);
ylim([0 50]);
yticks([0:10:50]);
pbaspect([1 1 1]);
set(gca,'TickLabelInterpreter','latex','FontSize',18);
nexttile;
image(angular_distribution);
hold off;
axis xy;
box on;
xlabel('$x$-{\it th} spatial direction, $x$','FontSize',18,'interpreter','latex');
ylabel('$y$-{\it th} spatial direction, $y$','FontSize',18,'interpreter','latex');
xlim([0 1000]);
xticks([0:200:1000]);
xticklabels({'0','10','20','30','40','50'});
ylim([0 1000]);
yticks([0:200:1000]);
yticklabels({'0','10','20','30','40','50'});
pbaspect([1 1 1]);
set(gca,'TickLabelInterpreter','latex','FontSize',18);
t1=title(['First case'],'FontSize',25,'interpreter','latex');
titleHandle=get(gca,'Title');
position_title=get(titleHandle,'position');
position1_title=[position_title(1) position_title(2)+420 position_title(3)];
set(titleHandle,'position',position1_title);
ax=nexttile;
image(angular_reference,'xdata',phi_range,'ydata',theta_range)
hold off;
box on;
axis xy;
xlabel('Azimuthal angle, $\phi \, \, \left( \pi \, \mathrm{rad} \right)$','FontSize',18,'interpreter','latex');
ylabel('Polar angle, $\theta \, \, \left( \pi \, \mathrm{rad} \right)$','FontSize',18,'interpreter','latex');
xlim([-pi pi]);
xticks([-pi:pi/2:pi]);
set(gca,'XTickLabel',{'-1','0.5','0','0.5','1'});
ylim([-pi/2 pi/2]);
yticks([-pi/2:pi/4:pi/2]);
set(gca,'YTickLabel',{'-0.5','0.25','0','0.25','0.5'});
xtickangle(ax,0);
ytickangle(ax,0);
pbaspect([1 1 1]);
set(gca,'TickLabelInterpreter','latex','FontSize',18);
set(gcf,'color','white');
set(gca,'Units','normalized')
set(u1,'Units','Inches');
posu1=get(u1,'Position');
set(u1,'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[posu1(3),posu1(4)]);
As it can be seen, the empty space between the right end of the colorbar of the first figure and the beginning of the second figure, and the spacing between the right end of the second and left of the third figure are not equal. It seems that there is a kind of invisible colorbar accompanying the second figure. How could I make the figures truly equally spaced?
  1 Kommentar
Matt J
Matt J am 8 Dez. 2023
Bearbeitet: Matt J am 8 Dez. 2023
As seen above, your code does not run.
Unrecognized function or variable 'x'.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Adam Danz
Adam Danz am 8 Dez. 2023
Bearbeitet: Adam Danz am 8 Dez. 2023
How could I make the figures truly equally spaced?
Using tiledlayout, the axes are equally spaced but the colorbar, axis labels, and other decorations fill some of the inter-axes space. There is currently no way to adjust the position properties of the axes in a tiled layout.
Here's a reduced version of the problem. Notice that I assigned the title to the TiledChartLayout object to achieve the global title in your question but without needing to position the title.
figure('Position',[100 100 700 150])
tcl = tiledlayout("horizontal");
nexttile()
imagesc(rand(500))
colorbar
nexttile()
imagesc(rand(500))
nexttile()
imagesc(rand(500))
title(tcl,'Global title')
Unlike tiledlayout, subplot adjusts the spacing while including the colorbar space. However, you lose several convenient features of tiledlayout. Also notice that the space consumed by the colorbar is taken away from the axis.
figure('Position',[100 100 700 150])
subplot(1,3,1)
imagesc(rand(500))
colorbar
subplot(1,3,2)
imagesc(rand(500))
subplot(1,3,3)
imagesc(rand(500))
One workaround using tiledlayout is to put the colorbar on the top or bottom of the axes
figure('Position',[100 100 700 250])
tcl = tiledlayout("horizontal");
nexttile()
imagesc(rand(500))
colorbar('Location','SouthOutside','Orientation','Horizontal')
nexttile()
imagesc(rand(500))
nexttile()
imagesc(rand(500))
title(tcl,'Global title')
Or on the left.
figure('Position',[100 100 700 200])
tcl = tiledlayout("horizontal");
nexttile()
imagesc(rand(500))
colorbar('Location','WestOutside')
nexttile()
imagesc(rand(500))
nexttile()
imagesc(rand(500))
title(tcl,'Global title')

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by