Different rows height in tiled layout
49 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Pawel Kubik
el 29 de Mzo. de 2021
Editada: Pawel Kubik
el 13 de Abr. de 2021
Hello,
is it possible to adjust row height in tilled layout? I have six plots in tiled layout (2x3). Each of them has own legend. In first and second plot there is 6 items, but in next plots there is only one item to display in legend.
The problem is that all tiles has the same size so there is large space between second and last row. Is it possible to change it?
X = 0:0.01:2*pi;
Y = sin(X);
tiledlayout(3, 2)
nexttile
hold on
plot(X, Y, "DisplayName",'A1')
plot(X, Y, "DisplayName",'A2')
plot(X, Y, "DisplayName",'A3')
plot(X, Y, "DisplayName",'A4')
plot(X, Y, "DisplayName",'A5')
plot(X, Y, "DisplayName",'A6')
legend
nexttile
hold on
plot(X, Y, "DisplayName",'A1')
plot(X, Y, "DisplayName",'A2')
plot(X, Y, "DisplayName",'A3')
plot(X, Y, "DisplayName",'A4')
plot(X, Y, "DisplayName",'A5')
plot(X, Y, "DisplayName",'A6')
legend
nexttile
hold on
plot(X, Y, "DisplayName",'A1')
legend
nexttile
hold on
plot(X, Y, "DisplayName",'A1')
legend
nexttile
hold on
plot(X, Y, "DisplayName",'A1')
plot(X, Y, "DisplayName",'A2')
plot(X, Y, "DisplayName",'A3')
plot(X, Y, "DisplayName",'A4')
legend
nexttile
hold on
plot(X, Y, "DisplayName",'A1')
plot(X, Y, "DisplayName",'A2')
plot(X, Y, "DisplayName",'A3')
plot(X, Y, "DisplayName",'A4')
legend
6 comentarios
Adam Danz
el 31 de Mzo. de 2021
Editada: Adam Danz
el 1 de Abr. de 2021
> I don't see any solution for the problem in matlab.
I think you gave up too quickly 😉
The problem is that the position of tiledlayout axes is not editable and the tile sizes all change when one of their legends gets too big.
There are way to change the legend size that may help (see my answer). You could also use subplot instead of tiledlayout and that solves the problem direclty since subplot axis positions are editable.
Respuesta aceptada
Matt J
el 2 de Abr. de 2021
Editada: Matt J
el 2 de Abr. de 2021
Another solution would be to use nested tiledlayouts, e.g.,
m1=[5,6];
m2=[1,1,1,2];
T=tiledlayout(5,1); %Outer layout
t=tiledlayout(T,1,2); %first inner layout
t.Layout.Tile=1;
t.Layout.TileSpan=[2,1];
for i=1:2
nexttile(t);
plot(rand(5,m1(i)));
legend('Location','southoutside')
end
t=tiledlayout(T,2,2); %second inner layout
t.Layout.Tile=3;
t.Layout.TileSpan=[3,1];
for i=1:4
nexttile(t);
plot(rand(5,m2(i)));
legend('Location','southoutside')
end
1 comentario
Más respuestas (1)
Adam Danz
el 31 de Mzo. de 2021
Editada: Adam Danz
el 31 de Mzo. de 2021
Options that either fix the problem or provide an alternative to the example provided.
Based on the image shared, it looks like the legend location is set to SouthOutside.
- legend('location','eastoutside') instead of SouthOutside.
- legend('location','SouthOutside','Orientation','Horizontal')
- legend('location','SouthOutside','NumColumns',3)
- Use subplots instead of tiled layout. You can change the position/size of axes created by subplot which directly fixes the problem.
- Using a global legend if possible.
All of the above were tested using the example code provided by OP (r2021a) and all of those options fixed the problem.
0 comentarios
Ver también
Categorías
Más información sobre Line Plots en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!