Best way to get constant plot sizes with varying width Yticklabels?

8 visualizaciones (últimos 30 días)
  • Matlab 2021a
  • Windows 10 64-bit
I am using the awesome exportgraphics command after programmatically fixing the size of the plot window to save the figures as vector PDFs. I then use these PDFs as figures in a LaTeX document with identical scaling parameters.
My issue is that width of the yticklabels scales the innerposition of the plot so that importing a figure with only two digit widths on the yticklablels next to one with three digits results in different sized plots. This effect is much worse if one of them contains a negative sign.
In other words, the entire bounding box (I believe is called the outerposition) of the figure is fixed size. But because the width of the yticklabels changes, the actual plot window scales to fit.
I have not tried it yet, but I believe that changing the fixed size of the plot window (innerposition) results in PDFs of different sizes, which will have the same result once it is added to the Latex document. I do not want to have custom scaling for each figure.
  2 comentarios
Jan
Jan el 17 de Abr. de 2021
It would be useful if you post a small working example with the creation of two axes. Then we need to know, which "awsome exportfigure" command you mean. Why not using printf -eps or the famous export_fig?
William Perdikakis
William Perdikakis el 17 de Abr. de 2021
Editada: William Perdikakis el 17 de Abr. de 2021
Sorry, I meant exportgraphics, corrected above.
This should be a MWE of the issue. Be sure to open the PDFs in the same sized window.
From this example, you can clearly see that one PDF is wider than the other. If these figures are scaled into the same sized bounding box the one labeled "small" will scale down more and appear smaller.
A solution that I can think of would be forcing the ylabeltick width, so the 'normal' graph would have padding on the left side, for example.
N=100;
t=linspace(0,2*pi,N);
y=sin(t);
plot(t,y+1)
ylabel('normal')
exportgraphics(gca,'normal.pdf','ContentType','vector')
figure
plot(t,100*y)
ylabel('small')
exportgraphics(gca,'small.pdf','ContentType','vector')

Iniciar sesión para comentar.

Respuestas (1)

Rishik Ramena
Rishik Ramena el 24 de Mayo de 2021
The plot sizes rendered by the exportgraphics function for vectors will be the same, but the dimensions of the pdf file will depend on your x and y labels and values. You can consider setting the labels and tick sizes in the plots but even that would not guarantee a consistent pdf size. I would suggest you to try the export_fig function. Try the -nocrop option, it might serve your purpose. Here's a link to the github page with usages and examples.

Categorías

Más información sobre Printing and Saving en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by