How do I use suptitle in my subplot

615 visualizaciones (últimos 30 días)
Isa Duran
Isa Duran el 23 de Mayo de 2014
Comentada: Michelle Hirsch el 3 de Mayo de 2021
Hi guys
I'm doing I subplot, where I want to make one "Super title". When I use the function suptitle the subplots gets weird! I have attached both plots with and without suptitle function, so you can see the difference...
for j=1:length(SR)
figure
for i=[1:4 6:9] %Creating row x collums for subplot
for c=1:8 %Number of headings
subplot(3,3,i)
plot(omega,Sp_we(:,c,j))
end
suptitle ('Wave spectrum for')
end
end
Isa Duran
  1 comentario
dpb
dpb el 23 de Mayo de 2014
Editada: dpb el 23 de Mayo de 2014
Don't have it; it's in a toolbox don't have so can't do anything except offer advice.
My first attempt at workaround would be to save the position vectors of all the subplots before calling suptitle and then reset them after it and see if that works ok. Variations on a theme afterwards may yet be needed.
There's a submission on File Exchange that has the functionality with 4 or 5 stars you might look at as well...I forget the exact submission name but a search for "suptitle" did find it.
Ok, the link was still in my browser recall...

Iniciar sesión para comentar.

Respuesta aceptada

Cedric
Cedric el 23 de Mayo de 2014
Editada: Cedric el 24 de Mayo de 2014
I usually build the array of subplots by myself in these cases, because I find that SUBPLOT is a bit too rigid. This essentially means placing axes within a figure, on a grid of equally spaced coordinates of axes lower left corners ((0,0) being the coordinates of the lower left corner if the figure and (1,1) the upper right corner). Here is an example.
% - Define dummy data: 11 time series.
t = 0 : 0.1 : 10 ;
data = 2 * repmat( sin(t).', 1,11 ) + rand( length(t), 11 ) ;
nSeries = size( data, 2 ) ;
% - Build figure.
figure() ; clf ;
set( gcf, 'Color', 'White', 'Unit', 'Normalized', ...
'Position', [0.1,0.1,0.6,0.6] ) ;
% - Compute #rows/cols, dimensions, and positions of lower-left corners.
nCol = 4 ; nRow = ceil( nSeries / nCol ) ;
rowH = 0.58 / nRow ; colW = 0.7 / nCol ;
colX = 0.06 + linspace( 0, 0.96, nCol+1 ) ; colX = colX(1:end-1) ;
rowY = 0.1 + linspace( 0.9, 0, nRow+1 ) ; rowY = rowY(2:end) ;
% - Build subplots axes and plot data.
for dId = 1 : nSeries
rowId = ceil( dId / nCol ) ;
colId = dId - (rowId - 1) * nCol ;
axes( 'Position', [colX(colId), rowY(rowId), colW, rowH] ) ;
plot( t, data(:,dId), 'b' ) ;
grid on ;
xlabel( '\theta(t) [rad]' ) ; ylabel( 'Anomaly [m]' ) ;
title( sprintf( 'Time series %d', dId )) ;
end
% - Build title axes and title.
axes( 'Position', [0, 0.95, 1, 0.05] ) ;
set( gca, 'Color', 'None', 'XColor', 'White', 'YColor', 'White' ) ;
text( 0.5, 0, 'My Nice Title', 'FontSize', 14', 'FontWeight', 'Bold', ...
'HorizontalAlignment', 'Center', 'VerticalAlignment', 'Bottom' ) ;
EDIT: this outputs

Más respuestas (1)

Michelle Hirsch
Michelle Hirsch el 5 de Mzo. de 2020
This capability is now built into core MATLAB. sgtitle ("Add title to subplot grid") was introduced in 18b. We also introduced tiledlayout in 19b as an alternative to subplot that gives more control over axes spacing, automatic layout reflowing as you add more axes, and support for titles, xlabels, ylabels that span multiple axes.
  2 comentarios
Diaa
Diaa el 1 de Mayo de 2021
In tiledlayout, there no such an option to control the exact spacing between the subplots. Is there a way to do so at the moment?
Michelle Hirsch
Michelle Hirsch el 3 de Mayo de 2021
@Diaa, I'm not aware of a way to do that, since tiledlayout is designed to behave like a layout manager - you give it guidance on how to behave, and it takes care of the details. Could you say more about why you'd like to control the exact spacing? This will help us figure out if we should enhance tiledlayout to support this.

Iniciar sesión para comentar.

Categorías

Más información sobre 2-D and 3-D 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!

Translated by