본문 바로가기

Enginius/Matlab

Reduce the Gap between SUBPLOT (subaxes)

매트랩에서 기본으로 제공하는 subplot은 유용하긴 하지만 여백이 너무 많이 남는다는 단점이 있다. 여백을 약간 줄일 수 있지만, 그래도 만족스럽지 않다. 그래서 한번 구현해봤다. 

아래 결과에서 알 수 있듯이 subaxes의 여백이 훨씬 적은 것을 알 수 있다. 


0.Comparison



1. demoSubaxes.m

%% subaxes 함수의 효용성을 확인해본다. 

clc;

clear all;

close all;


%% 1. matlab에서 지원하는 subplot으로 그린 것 

fig1 = figure(1);

set(fig1, 'Position', [100 100 700 800]);

for i = 1:4

    subplot(2, 2, i);

    title(sprintf('subplot %d', i));

end


%% 2. 내가 만든 subaxes로 그린 것 

fig2 = figure(2);

set(fig2, 'Position', [900 100 700 800]);

margin = 0.08;

for i = 1:4

    subaxes(fig2, 2, 2, i, margin);

    title(sprintf('subaxes %d', i));

end 


2. subaxes.m (function)

function subaxes(figHandler, h, w, index, margin)

% subplot과 같지만, margin을 내가 조절할 수 있다는 장점이 있다. 

% figHandler : Figure handler

% h          : 전체 subfigure의 height

% w          : 전체 subfigure의 width

% index      : subfigure의 inded

% (margin)   : margin

if nargin == 4

    margin = 0.05;

end


w_idx = rem(index, w);

if w_idx == 0, w_idx = w; end;

w_idx = w_idx - 1;

h_idx = ceil(index/w) - 1;

h_idx = h - h_idx - 1;


w_unit = 1/w;

h_unit = 1/h;


x_start = w_unit*(w_idx) + margin/4;

y_start = h_unit*(h_idx) + margin/2;

x_len = w_unit-margin/2;

y_len = h_unit-margin;


axes('Parent', figHandler ...

    , 'Position' ...

    , [x_start, y_start, x_len, y_len] );