Borrar filtros
Borrar filtros

Colorbar spacing issue using tiledlayout

28 visualizaciones (últimos 30 días)
Sebastian
Sebastian el 21 de Jun. de 2021
Respondida: Dave B el 28 de Jul. de 2021
I'm using Matlab R2021a. I still have some problems using colorbar for multiple plots:
My main intention is to create a tiledlayout, plotting different plots (3 to 4) and to insert one shared colorbar to the right. To illustrate this, I used peaks in the following code:
fig= figure('color', 'w');
tile= tiledlayout(2,2,'TileSpacing','compact','Padding', 'compact');
for a=1:3
nexttile(a);
contourf(peaks);
set(gca, 'FontSize', 14);
title(['Plot No. ', num2str(a)],'FontName','Arial Narrow','FontSize',14);
end
xlabel(tile, 'X-Label [unit]');
ylabel(tile, 'Y-Label [unit]');
cb= colorbar('FontName','Arial Narrow','FontSize',14);
cb.Label.String = 'Label';
cb.Layout.Tile= 'east';
The first problem that arises is that Mablab truncates the associated label. It's presented correctly in the Matlab-figure but when I'm saving the figure as .png or .tiff using print-fuction the label is cut off. Has anyone got an idea how to solve this so that Matlab is considering the space for the label or to "freeze" the figure before saving?
Another problem I'm facing is that i would like to reduce the (constant) hight of the colorbar while keeping it centered. This is especialy useful when plotting more than 2 plots in height so that the colorbar doesn't become overwhelming. My aim would look as follows:
Thank you in advance!
  1 comentario
Sergey Kasyanov
Sergey Kasyanov el 21 de Jun. de 2021
Editada: Sergey Kasyanov el 21 de Jun. de 2021
Hello!
It is not difficult to set sizes of any elements on figure by 'Position' and another properties. There are a lot of ways to get handles of graphic objects for operating with them. For example you can get all graphic objects on figure by:
objects = get(gcf, 'Children');
Then you can change their position on figure by:
set(objects(2), 'Position', [0.1, 0.1, 0.5, 0.5]);
I can't use your code for trying on your example (it does not work for me), but it is very simple. Also try property 'Outer Position'.

Iniciar sesión para comentar.

Respuestas (1)

Dave B
Dave B el 28 de Jul. de 2021
@Sebastian - For the first bit, that looks frustrating! When I tried the same code (also in R2021a) the colorbar's label was not cut off. I used print as follows:
print(gcf,'-dpng','foo_print.png')
An alternative to try is to use the exportgraphics function. It crops things a little differently and while I normally think it's advantage is that it crops things more tightly, maybe it will do a better job in this case?
exportgraphics(gcf,'foo_exportgraphics.png')
*note you can also pass in the tiled layout (tile in your code) as the first argument to exportgraphics.
A final alternative is to try a different option for Padding, although I don't think you should need to do this. Please do let me know if exportgraphics doesn't crop correctly for you.
For the second part I sadly don't have great suggestions for fine-grained control of the position of the colorbar, but there's a trick for getting a colorbar that's centered and about 1/3 the size of the layout. The strategy is basically to surround the colorbar with a couple of 'placeholder' layouts. That's a little smaller than one you were after but maybe an improvement? I'm hoping this is an area we can provide more options.
placeholder1=tiledlayout('flow','Parent',tile);
placeholder1.Layout.Tile='east';
cb= colorbar('FontName','Arial Narrow','FontSize',14); % Your existing line of code
placeholder2=tiledlayout('flow','Parent',tile);
placeholder2.Layout.Tile='east';

Categorías

Más información sobre Graphics Object Properties en Help Center y File Exchange.

Productos


Versión

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by