Help fixing different sized plots with tiled layout

조회 수: 39 (최근 30일)
Manuel Santana
Manuel Santana 2024년 12월 20일
답변: Catalytic 2024년 12월 22일
I am trying to make a 3 x 3 tiled layout of wide rectangles, each of which has a title. However when I try this, (minimal example below) the top three figures appear slightly smaller than the bottom figures. The question is how do we fix this? I am aware that subplot does not have this issue, however subplot has too much white space between the figures for my purposes. Also I know that if I take the titles out, the figures are all the same size, but I need all the titles to be there.
figure(3);
clf
tiledlayout(3,3,"TileSpacing","compact","Padding","compact");
xlims = [-13,3];
ylims = [-3,3];
for ii = 1:9
to_plot = zeros(410,170);
nexttile
% subplot(3,3,ii) % Gets rid of the problem, but leaves too much white
% space.
ax = gca;
hold on
imagesc(xlims,ylims,to_plot,'Interpolation','bilinear')
shading interp;
colormap("jet")
title(ax, "$t = " + num2str(ii) + "$",'interpreter','latex','fontsize',15)
hold off
axis equal
axis off
end
  댓글 수: 2
Cris LaPierre
Cris LaPierre 2024년 12월 20일
편집: Cris LaPierre 2024년 12월 20일
I also see that. I can get it to go away if I remove either the 'axis equal' or the title. That doesn't seem right, so I have reported it internally.
tiledlayout(3,3,"TileSpacing","compact","Padding","compact");
xlims = [-13,3];
ylims = [-3,3];
for ii = 1:9
to_plot = zeros(410,170);
nexttile
imagesc(xlims,ylims,to_plot)
title("$t = " + num2str(ii) + "$",'interpreter','latex','fontsize',15)
% axis equal
axis off
end
Sabhrant
Sabhrant 2024년 12월 21일
Good observation

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2024년 12월 21일
편집: Matt J 2024년 12월 21일
Since you use imagesc to generate the subfigures, it seems to me that you should be using axis image.
tiledlayout(3,3,"TileSpacing","compact","Padding","compact");
xlims = [-13,3];
ylims = [-3,3];
for ii = 1:9
to_plot = zeros(410,170);
ax(ii)=nexttile;
imagesc(xlims,ylims,to_plot,'Interpolation','bilinear')
shading interp;
colormap("jet")
title( "$t = " + ii + "$",'fontsize',15,'interpreter','latex')
axis off
axis image
end
pos_table =array2table( vertcat(ax.InnerPosition), VariableNames={'Left','Lower','Width','Height'}, RowNames=compose('t = %d',1:9))
pos_table = 9x4 table
Left Lower Width Height _______ ________ _______ _______ t = 1 0.065 0.7468 0.26976 0.13449 t = 2 0.37012 0.7468 0.26976 0.13449 t = 3 0.67524 0.7468 0.26976 0.13449 t = 4 0.065 0.4177 0.26976 0.13449 t = 5 0.37012 0.4177 0.26976 0.13449 t = 6 0.67524 0.4177 0.26976 0.13449 t = 7 0.065 0.088609 0.26976 0.13449 t = 8 0.37012 0.088609 0.26976 0.13449 t = 9 0.67524 0.088609 0.26976 0.13449

추가 답변 (1개)

Catalytic
Catalytic 2024년 12월 22일
axis equal does not ensure that the plot box reserved for the image will fit around it tightly. For that, you must add axis tight
tiledlayout(3,3,"TileSpacing","compact","Padding","compact");
xlims = [-13,3];
ylims = [-3,3];
for ii = 1:9
to_plot = zeros(41,17);
ax(ii)=nexttile;
imagesc(xlims,ylims,to_plot,'Interpolation','bilinear')
axis off
axis equal; axis tight
shading interp;
colormap("jet")
title( "$t = " + ii + "$",'fontsize',15,'interpreter','latex')
end

카테고리

Help CenterFile Exchange에서 Subplots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by