[matlab] 3.matlab으로 그래프 그리기(1)


plot을 이용한 그래프 그리기



이번 시간에는 matlab을 이용하여 그래프를 그리는 방법에 대해 알아보겠습니다.

먼저, figure을 이용하여 창을 생성해야 합니다.

figure(1) %figure 1이라는 이름의 창 생성

for n=1:10
	figure(n) %figure 1~10이라는 이름의 창 10개 생성
end



명령어를 입력하면 다음과 같은 창이 생성됩니다.


image



그래프를 그릴 때는 plot이라는 명령어를 이용하면 됩니다.


plot(X,Y)
	
x축은 X, y축은 Y를 값으로 갖는 2차원 그래프를 보여줍니다.

plot(X,Y,S)

S는 선의 종류, 심볼(symbol) 또는 색을 나타낼 수 있는 옵션 값입니다.(자세한 것은 밑에 사진 참조)

plot(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...)

여러 개의 벡터를 한번에 같이 나타낼 수 있습니다.



다음 사진은 plot 명령어의 옵션입니다. 모양과 라인이 둘 다 없다면 실선으로 그래프를 그리게 됩니다.


image



plot을 이용해 그림을 그리면서 명령어들을 배워보겠습니다.

먼저, y=2*X+3 그래프를 그려보겠습니다.


figure(1)
X=-2:0.1:2;
Y=2*X+3;
plot(X,Y);



다음은 실행 결과입니다.


image



X에 해당하는 점만 찍힐 줄 알았는데 그 점을 다 이은 직선이 나왔습니다.

이처럼 모양이나 라인을 지정해주지 않으면 점을 잇는 실선이 나옵니다.

이번에는 y=n*x+1의 그래프를 (n=1..10) 10개의 창에 각각 그려보겠습니다.


X=-2:0.1:2;
for n=1:10
	figure(n) %figure 창을 반복문을 이용하여 10개 생성
	Y=n*X+1;
	plot(X,Y)
end



한 창에 위의 함수 10개를 그리고 싶으면 hold on 명령어를 이용합니다.


figure(1)
X=-2:0.1:2;
for n=1:10
	hold on; % 현재 그래프에 다음 생성될 그래프를 추가
	Y=n*X+1;
	plot(X,Y)
end
hold off; % hold on 기능을 해제



다음은 실행 결과 입니다.


image



이번에는 위의 예제를 hold on을 사용하지 않고 벡터를 이용하여 구현하겠습니다.


X=-2:0.1:2;
Y=[];
figure(1)
for n=1:10
	Y=[Y;n*X+1]; %행의 갯수가 n개인 벡터
end
plot(X,Y)



결과는 위와 똑같다는 것을 볼 수 있습니다.


image



이번에는 plot에 Y만 전달하면 어떻게 되는지 알아보겠습니다.


Y=[-1,-2,3,4];
plot(Y)

%Y만 전달하면 X는 자동적으로 1,2,3,4..순차적으로 전달됩니다



다음 실행 결과 처럼 점이 먼저 찍히고 직선으로 이어집니다.


image



다음으로 밑의 코드를 보면서 추가적인 명령어를 설명하겠습니다.


x=-2:0.1:8;

figure(1)
% sinx와 cosx를 그리는데, sinx는 검정색 파선(dashed line), cosx는 파란색 원으로 나타냄. 
plot(x,sin(x),'k--',x,cos(x),'bo')

title('Sine Cosine') %그래프의 제목을 넣는다.

xlabel('x') %x축 이름 넣기

ylabel('y') %y축 이름 넣기

legend('Sine','Cosine') %각 그래프의 범례 넣기

grid ON %격자(바둑 판 배열) 넣기 참고로 grid OFF는 격자를 지운다.

text(2,1,'Here') %좌표 )(2,1) 위치에 'Here'을 표시

xlim([0,2*pi]);  %그래프의 x축 범위

ylim([-1.2,1.2]) %그래프의 y축 범위

%plot에서 모양이 설정되고, 라인이 설정되지 않으면 x에 대응되는 점만 그려집니다.



다음은 실행결과입니다.


image



cosine 그래프를 점선으로 잇고 싶으면 다음과 같이 수정하면 됩니다.


plot(x,sin(x),'k--',x,cos(x),'bo:')




image



grid를 OFF하면 격자가 사라지게 됩니다.


image



그리고 유용한 명령어를 하나 더 알아보겠습니다.


axis square %figure window를 정사각형으로 바꿈

axis equal % x,y축의 unit을 동일하게 한다. 즉 x축과 y축의 비가 같으며, 실제 사물 크기 비율



axis equal은 원을 그릴 때 유용합니다.



이번에는 반지름이 각각 2,1인 원을 그려보겠습니다.


t=linspace(0,2*pi,100); %점을 일정하게 나누기 위해 linspace를 사용하는 것이 좋습니다.
figure(1)
plot(cos(t),sin(t),'r:',2*cos(t),2*sin(t),'ks')
title('원 C1 C2')
xlabel('x')
ylabel('y')
legend('C1','C2')
grid ON
xlim([-4,4])
ylim([-4,4])
axis equal



실행 결과입니다.


image



x축과 y축을 그리기 위해선 어떻게 해야할까요?? 알아보겠습니다.


x=[-5,5]; %-5부터 5까지 닫힌 구간
s=size(x);
y=zero(s(2));
hold on;
plot(x,y,'k-',y,x,'k-');
hold off;

%plot에서 x와 y의 배열의 크기를 맞추어 주어야 합니다.



그러면 x축과 y축이 이쁘게 그려지는 것을 볼 수 있습니다.


image