본문 바로가기

Software/MATLAB

보고서용으로 사용할 가운데 축이 있는 그림 그리기

MATLAB으로 작업한 결과를 그래프로 그리고 보고서에 첨부할 일이 생길때가 있습니다. 사실 MATLAB의 Figure는 그린 후에 각 종 속성을 모두 추가 할 수 있기 때문에 왠만한건 요즘 코드로 짜지 않을 수가 있지만... 한 가지.. 가로/세로 축(axis)을 가운데에서 그리고 싶을때는 난감할 수 있습니다. Python의 Matplotlib의 경우는 axis의 position 속성이 있던데 MATLAB은 없는듯... (혹은 제가 모를 수도ㅠㅠ)하여 살짝 찾아보니.. 저와 같은 질문이 matlabcentral에 많더군요. 여기 저기 뒤져서 보았더니 대부분 비슷한 솔루션을 제시하고 있길래 저도 여기저기 기웃거린 소스를 버무려서 살짝 테스트를 해보았습니다. 제가 만든것이 아니라 많은 코드를 참조했다는 것이지요.ㅠㅠ. 

t = -pi : 0.001 : pi;
y = sin(t);

plot(t, y, 'LineWidth', 2.5)

hold on

X = get(gca, 'Xtick'); Y = get(gca, 'Ytick');
XL = get(gca, 'XtickLabel'); YL = get(gca, 'YtickLabel');
Xoff = diff(get(gca, 'XLim'))./50; Yoff = diff(get(gca, 'YLim'))./50;

plot(get(gca, 'Xlim'), [0 0], 'k')
plot([0 0], get(gca, 'YLim'), 'k')

for i=1:length(X)
    plot([X(i) X(i)], [0 Yoff/2], '-k')
end
for i=1:length(X)
    plot([Xoff/2 0], [Y(i) Y(i)], '-k')
end

text(X, zeros(size(X))-2.*Yoff, XL);
text(zeros(size(Y))-3.*Xoff, Y, YL);

text(pi/4, sin(pi/4), '\leftarrow sin(pi/4)')

hold off
box off
axis off
set(gcf, 'color', 'w')

일단, 컨셉을 말씀드리면, 주어진 기본 축과 박스선을 지우고, 그냥 축을 내가 다시 다 그리겠다~~~라는 거죠.. 그걸 위해서 먼저 기본 plot에서 Xtick, XtickLabel, XLim을 X 축에서 확보를 해야합니다. Y축도 같은 값을 확보(get)합니다. 그리고 눈금도 그리고 라벨 숫자도 다시 입력하는 거죠... 아.. 그리고 마지막 부분에는 살짝 화살표 annotation을 쉽게 하는 방법하나를 찾아서 같이 넣었습니다. 

그러면.. 위와 같은 그림이 나오는거죠...^^ 바탕도 흰색으로 해버려서 캡쳐뜨기도 편하도록 말이죠^^

반응형