Как уменьшить границы вокруг сюжетов в Matlab?

В Matlab чрезмерное количество места тратится впустую вокруг подзаголовков. Например, в этом примере:

t = 0:0.001:2*pi+0.001;
figure(2);
for i = 1 : 25;
    subplot(5,5,i);
    plot(t, sin(i*t));
    axis off
end

Пример пустого пространства на подграфиках

более 50% пространства на рисунке тратится впустую как пустое. Я хотел бы уменьшить это пустое пространство, но не смог определить механизм для этого. Мысли?


person John    schedule 13.07.2011    source источник
comment
Примечание. Начиная с 2019b, Mathworks решила эту проблему с помощью команды tilelayout.   -  person John    schedule 21.03.2020


Ответы (3)


Функция subaxis в File Exchange позволяет указать поля для подграфиков.

Пример использования:

t = 0:0.001:2*pi+0.001;
figure(2);
for i = 1 : 25;
    subaxis(5,5,i, 'Spacing', 0.03, 'Padding', 0, 'Margin', 0);
    plot(t, sin(i*t));
    axis tight
    axis off
end

введите здесь описание изображения

person nibot    schedule 13.07.2011

Вы можете расположить их самостоятельно (или программно), используя

subplot('Position',[left bottom width height]);

По умолчанию координаты нормализованы. Таким образом, позиция [0,1 0,1 0,5 0,5] будет начинаться на 10% от нижнего левого угла и будет иметь ширину, равную половине ширины фигуры, и высоту, равную половине высоты фигуры.

См. принятый ответ для встроенного решения для полей и заполнения.

person Nicolas Renold    schedule 13.07.2011

Попробуйте уменьшить значения по умолчанию в свойстве скрытых осей LooseInsets, как описано в http://UndocumentedMatlab.com/blog/axes-looseinset-property/

Например:

set(gca, 'LooseInset', get(gca,'TightInset'))
person Yair Altman    schedule 14.07.2011
comment
По крайней мере, в моем примере это ничего не делает на 2011a. - person John; 15.07.2011
comment
дополнительное пространство занимают скрытые метки осей X и Y, и я не верю, что их можно устранить. Но улучшить ситуацию можно следующим образом: figure(2); for i = 1 : 25; hax=axes(); plot(t, sin(i*t)); axis tight; axis off; rowIdx=fix((i-1)/5); colIdx=mod(i-1,5); newPos=[.2*colIdx,0.8-.2*rowIdx,.2,.2]; set(gca,'outer',newPos), end - person Yair Altman; 18.07.2011
comment
Работает ли LooseInset с подзаговорами? - person roni; 16.09.2013