여기에서는 이전 포스트들 (part 1, part 2, part 3)에 이어서 plot()함수에 대해서 더 알아보도록 하겠다.  plot()함수에서 그림의 제목과 x축 라벨 그리고 y축 라벨을 써주는 함수는 각각 title(), xlabel(), ylabel()함수이며 이들은 문자열을 입력 파라메터로 받아들여서 그래프에 도시하는 함수이다. 예로서 함수 sin(x)/x 그래프를 그려보자.


>> x=0:0.1:10
>> y=sin(x)./x
>> plot(x,y)


여기서 두 번째 줄에서 y값을 계산하는데 (./)연산자를 사용했음에 주의해야 한다. sin(x)도 벡터이고 x도 벡터이므로 각각의 요소간 나눗셈을 수행해야 하므로 (./)연산자를 사용한다. 이제 이렇게 생성된 그래프에 제목과 x축 라벨 그리고 y축 라벨을 추가해 보자.


>> title('graph of sin(x)/x')
>> xlabel('x')
>> ylabel('y')


결과 그림을 확인해 보면 그래프 상단에 타이틀이 하단에 x축 라벨이 그리고 오른편에 y축 라벨이 표기되어 있음을 확인할 수 있다.

[그림 1] 실행 결과 (gnu octave 를 캡처)


각 축의 화면에 보여지는 범위를 조절하는 함수로서 axis()함수가 있으며 이 함수의 문법은 다음과 같다.


>> axis([XMIN XMAX YMIN YMAX])


여기서 XMIN와 XMAX는 각각 x축의 최소값과 최대값을 그리고 YMIN와 YMAX는 각각 y축의 최소값과 최대값을 표기한다. 예를 들면 다음과 같다.


>> axis([2 8 -0.2 0.6])


이렇게 하면 그래프의 x축 범위가 2에서 8로 그리고 y축 범위가 -0.2에서 0.6으로 조정된다. 또한 axis()함수가 입력파라메터 없이 사용되면 현재 그래프의 xy축의 범위를 반환한다.


>> axis
2.0000 8.0000 -0.2000 0.6000

 MATLAB이 자동으로 축의 범위를 설정하게 하려면 axis auto 명령을 사용한다.


 이제 하나의 그림창에 여러 함수의 그래프를 도시하는 다른 방법을 살펴보자. 먼저 다음과 같은 두함수를 x∈[0,10]의 구간에 대해서 도시하고자 한다.

도시할 데이터를 다음과 같이 생성한다.


>> x = linspace(0,10,50)
>> y1= -0.5*x.^2+1;
>> y2= 2*sqrt(x)-10;


그리고 다음과 같이 그래프를 생성한다.


>> plot(x,y1,'k')
>> hold on
>> plot(x,y2,'k--')
>> grid on
>> legend('-0,5*x^2+1','2*sqrt(x)-10')


여기서 ‘hold on’ 이라는 명령어가 사용되었다. 이 명령어는 지금 활성화된 그래프 창의 내용을 그대로 유지하라는 명령어이다. 그렇기 때문에 두 번째 plot()함수에 의해서 처음에 그려진 그림이 지워지지 않고 그 위에 덧그려진다. 만약 hold on 명령어가 없었다면 첫 번째 그림은 지워지고 두 번째 그림만 남았을 것이다. hold off명령어를 내리지 않는 이상 이후에 호출되는 plot()함수에 의한 결과는 계속 그 위에 덧그려진다. 그리고 grid on 이라는 명령어는 그림에 격자 표시를 하라는 명령어이다. 격자를 지우고 싶으면 grid off라고 하면 된다. 마지막으로 legend()함수는 문자열들을 입력으로 받아서 그래프들에 대한 설명을 생성하는 명령어이다.

[그림 2] 실행 결과 (gnu octave 를 캡처)

 현재 그래프 창의 내용을 지우는 명령은 clf이고 새로운 그래프 창을 생성하는 함수는 figure()함수이다. 위의 예로 다시 설명하면 두 함수를 각각 다른 창에 도시하고 싶을 때는 다음과 같이 하면 된다.


>> plot(x,y1)
>> figure(2), plot(x,y2,'k')


첫 번째 plot()함수로 첫 번째 그림창이 생성되므로 이 그래프 창이 1번의 번호를 가지게 된다. figure(2)라는 명령어로 두 번째 새로운 그래프 창이 생성이 되며 이후의 plot()함수에 의한 그림은 두 번째 창에 그려지게 된다. (캡션바에 그래프 창 번호가 표시됨)


[그림 3] 실행 결과 (gnu octave 를 캡처)

 현재 열려있는 특정한 그림창을 없애는 명령어는 close(n)명령어이다. 이 명령어로 n번 그래프 창이 소멸된다. 현재 생성되어 있는 모든 그림창들을 닫고 싶으면 close all 명령을 내리면 된다.



Posted by 살레시오