МАТЛАБ: Правильный размер фигуры - PullRequest
3 голосов
/ 08 мая 2011

У меня есть фигура, которую я хотел бы изменить, а затем распечатать в формате PDF.Использование чего-то вроде

set(hFig, 'PaperUnits', 'centimeters')
set(hFig, 'PaperSize', [x_B x_H]);

работает до тех пор, пока я не изменю размер фигуры слишком резко.Если я уменьшу высоту, то в некоторых точках xlabel выходит из фигуры.Я много искал, но нашел решение только для того, чтобы вручную изменить размер базового объекта оси

scalefactor = 0.96;
movefactor = 0.82;
hAx = get(gcf,'CurrentAxes');
g = get(hAx,'Position');
% 1=left, 2=bottom, 3=width, 4=height
g(2) = g(2) + (1-movefactor)/2*g(4);
g(4) = scalefactor*g(4);
set(hAx,'Position',g);

. Мне не нравится этот подход, поскольку мне приходится вручную корректировать два фактора.печать Я установил «интерпретатор» на «латекс» для всех текстовых объектов (если это имеет значение).Печать достигается с помощью

print(hFig, '-dpdf', '-loose', 'test.pdf');

Я надеялся ослабить ограничивающую рамку с помощью '-loose'.Любая помощь очень ценится!

edit: Кажется, что действительно интерпретатор (none, tex, latex) играет в этом роль.Я был вдохновлен этим постом здесь (http://stackoverflow.com/questions/5150802/how-to-save-plot-into-pdf-without-large-margin-around) и придумал это решение:

tightInset = get(gca, 'TightInset');
position(1) = tightInset(1);

position(3) = 1 - tightInset(1) - tightInset(3);
if strcmpi(x_Interpreter,'latex')
    position(2) = tightInset(2)+ 1*tightInset(4);
    position(4) = 1 - tightInset(2) - 2*tightInset(4);
else
    position(2) = tightInset(2)+ 0*tightInset(4);
    position(4) = 1 - tightInset(2) - 1*tightInset(4);
end
set(gca, 'Position', position);

1 Ответ

1 голос
/ 11 июля 2011

Это может не решить вашу проблему полностью (это может просто помочь очистить ваш код), но я обнаружил, что код fig в обмене файлами может быть полезным: он позволяет вам легко установить точный размерфигуры без ограничивающего пробела.

...