IT

옥타브(Octave) 프로그래밍 튜토리얼 (4) - 데이터 플로팅(Plotting Data)

유병혁 2015. 12. 23. 02:02

본 글은 코세라 머신러닝(Machine Learning)을 수강하면서 일부 내용을 정리한 것입니다.
강의 사이트: https://www.coursera.org/learn/machine-learning

 

이번 글에서는 데이터 플로팅에 대해 정리해 보도록 하겠습니다.

일단, 0부터 0.98까지 0.01간격으로 증가시키는 행렬 t를 생성하였습니다.

이 때 y1을 아래와 같이 t에 대한 sin 함수로 설정했을 때 plot(t, y1)은 아래와 같습니다.

>> t = [0:0.01:0.98];
>> y1 = sin(2*pi*4*t);
>> plot(t, y1);

 

이번에는 t에 대한 cos함수를 y2로 선언해 보겠습니다.

>> y2 = cos(2*pi*4*t);
>> plot(t, y2);

 

hold on을 사용하면 두 개의 곡선을 아래와 같이 하나의 플롯으로 표현할 수 있습니다.

여기서 세 번째 줄의 'r'은 이벤트 색상을 지정하는 코드입니다.

>> plot(t, y1);
>> hold on;
>> plot(t, y2, 'r');

 

라벨, 범례, 제목도 아래와 같이 별도로 설정해 줄 수 있습니다. 간단하죠?!

>> xlabel('time')
>> ylabel('value')
>> legend('sin', 'cos')
>> title('my plot')

 

위 플롯을 png와 같은 이미지 파일로 출력할 수도 있는데요, 아래 코드와 같습니다.

close는 현재 열려 있는 플롯 창을 모두 닫아주는 기능을 수행합니다.

>> cd 'C:\myPlot'; print -dpng 'myPlot.png'
>> close

 

참고로, 옥타브에서 기본적인 초기화 함수들은 다음 글을 참조하시기 바랍니다.

옥타브(Octave) 프로그래밍 - 초기화(Initialization) 함수 소개 | http://blog.daum.net/geoscience/851

 

각 플롯은 figure()와 같이 지정하거나, subplot()을 통해 하나의 창에 여러 개의 플롯을 그릴 수도 있습니다.

subplot(1, 2, 1)이라고 하면, 플롯을 1*2 격자로 분할하고 첫 번째 원소를 이용한다는 의미가 되겠습니다.

여기서는 1*2 격자로 분할된 상태에서 첫 번째 원소는 plot(t, y1)을, 두 번째 원소는 plot(t, y2)를 그렸습니다.

>> figure(1); plot(t, y1);
>> figure(2); plot(t, y2);
>> subplot(1, 2, 1); % Divides plot a 1*2 grid, access first element
>> plot(t, y1);
>> subplot(1, 2, 2);
>> plot(t, y2);

 

axis()는 플롯 각 축의 최소, 최대 범위를 지정해 주는데요,

아래 창 우측 플롯의 x축이 0.5 ~ 1 범위로, y축이 -1 ~ 1로 조정되었습니다.

그리고 clf는 현재 열려 있는 창에서 내용만 지워주는 화면 정리 기능을 제공합니다.

>> axis([0.5 1 -1 1])
>> clf;

 

이번에는 imagesc() 함수에 대해 알아보겠습니다. 먼저, magic(5) 행렬을 선언했는데요,

앞서 배운 것처럼 magic()함수는 지정된 개수만큼 N * N 행렬을 만들어 줍니다.

이 때 행렬은 행, 열, 대각의 합이 모두 일치하는 특성을 가지고 있습니다.

>> A = magic(5)
A =
   17   24    1    8   15
   23    5    7   14   16
    4    6   13   20   22
   10   12   19   21    3
   11   18   25    2    9

 

위와 같은 A 행렬을 imagesc()로 선언하면 어떻게 될까요?!
이 함수는 컬러영상으로 행렬의 규모를 표현할 수 있는데요, 결과는 아래와 같습니다.

>> imagesc(A)

 

보다 상세한 설정도 가능한데요, 아래와 같이 각 원소 색상의 척도는 실제 값의 정도와 일치합니다.

>> imagesc(A), colorbar, colormap gray;
>> A(1, 2)
ans =  24
>> A(4, 5)
ans =  3

 

이번에는 마방진(magic matrix)을 15로 설정해 봤습니다. 꽤 재밌는 기능이죠?!

>> imagesc(magic(15)), colorbar, colormap gray;