초급-MATLAB 해양자료처리

MATLAB - Plotting

Kamanberr 2023. 9. 16. 10:18

맨 처음에는 ‘clc; clear; close all을 적는다

※ 제발 좀 적어줬으면 좋겠다.

코드가 짧으면 상관없지만, 코드가 길어지면 나중에는 어디서 에러가 났는지 몰라서, 디버깅 하는 게 매우 골치아파진다. 

그냥 적어라. 맨 처음에 적는다고 머릿속에 박아넣으면 된다.

다 본인을 위한 거다. 


clc : 명령창을 지우는 명령어 (작업 환경을 깔끔하게 만들어 준다.)
clear : 작업공간을 지우는 명령어 (메모리 효율을 높여 준다.)

 

지금까지는 clc; clear;만 이야기 했었다. 그런데 지금부터는 MATLAB으로 그림을 그리기 때문에, 실행을 시키면 figure이 뜨게 될 것이다. 코드를 작성하고 시행착오를 반복하면서, figure 창을 매번 일일이 닫을 수 없으니, close all;이라는 명령어를 스크립트 맨 처음에 적어 두는 것이 좋다.  

 

close all : 현재 열려 있는 모든 figure창을 모두 닫는 명령어

Plot

plot 함수를 사용하면 길이가 같은 두 개의 벡터를 x, y축 좌표로 하는 그래프를 plotting할 수 있다.

x = [ 1 2 3 ]; y = [ 5 3 2 ];
plot(x, y);

 

하나의 벡터만 사용하면, 벡터의 값들은 y축 데이터로 사용되고, x축 데이터는 1~n 의 값으로 지정된다. 

y = [ 5 3 2 ];
plot(y);

 

plot 함수는 색, 스타일, 마커 스타일을 지정하는 입력인수도 가질 수 있다.

x = [ 1 2 3 ]; y = [ 5 3 2 ];
plot(x, y, “r--o”);

이 명령은 원(o)마커와 빨간색(r) 파선(- -)을 사용하여 plot한다.

구체적인 Line 속성은 아래의 링크를 참고하라.

https://kr.mathworks.com/help/matlab/ref/matlab.graphics.chart.primitive.line-properties.html 

 

차트 선의 모양과 동작 - MATLAB - MathWorks 한국

테이블 데이터로 만든 플롯은 SourceTable, XVariable, YVarlable, ZVariable 속성을 사용하여 수정합니다. 극좌표 플롯의 경우 RVariable 속성과 ThetaVariable 속성으로 데이터 변수를 업데이트할 수 있습니다. 지

kr.mathworks.com

 

plot 함수는 색, 스타일, 마커 스타일을 지정하는 입력인수도 가질 수 있다.

x = [ 1 2 3 ]; y = [ 5 3 2 ];
plot(x, y, “LineWidth”, 5);

이 명령은 선의 두께를 조절한다.

 

이미 그려진 plot 위에 또 다른 plot을 추가하고 싶다면, hold on 명령을 사용하라.

figure(1)

hold on;
x1 = [ 1 2 3 ]; y1 = [ 5 3 2 ];
plot(x1, y1);

x2 = [ 1 2 3 ]; y2 = [ 1 4 5 ];
plot(x2, y2);
hold off; 		% hold on 상태를 끄는 명령어

plot에 제목을 달 수 있다.

title("Plot Title")

각 축에 labeling을 할 수 있다.

ylabel("Mass(g)")

legend 함수를 사용하여, 범례를 추가할 수 있다.

legend("a", "b")

grid on을 사용하여 격자선을 그릴 수 있다.

grid on

 

subplot 함수를 사용하면, 하나의 그림창에 여러 개의 그림을 따로 그릴 수 있다.

 


plot 함수를 사용하면 figure이 하나 뜨면서 그림이 그려진다. 그런데 MATLAB에서는 코드를 위에서부터 아래로 하나씩 읽어 가면서 실행을 시키기 때문에 만약 hold on 없이 plot 함수가 2개 있다면,

1. 첫번째 plot이 실행되어서 그림창에 첫번째 그림이 그려진 후,

2. 두번째 plot이 실행되어서 그림창에 있던 첫번째 그림이 지워지고, 두번째 그림이 새로 그려진다.

그런데 hold on을 사용해서 두 그림을 겹쳐서 나타내고 싶은 것이 아니라, 서로 다른 두 개의 figure창을 각각 따로 띄워서 그림을 그리고 싶다면 어떻게 해야 할까?

 

각각의 plot 앞에 figure(1)figure(2)를 적어준다.

  figure 함수는 이렇게 새로운 그림창을 생성해내는 함수이다.  


Plot 관련 주의사항

A라는 데이터에 대해서 plot 함수를 사용할 때, 주의할 점이 있다. 만약 A라는 데이터 안에 NAN값이 들어있을 경우, plot 함수가 적용되지 않는다는 것이다.

(NAN은 not a number라는 뜻으로, 특정 값이 그 안에 들어있지 않다는 것이다.)

그렇기 때문에 이 과정에서 우리는 인덱싱을 사용해야 한다.

NAN 값이 아닌, 실제로 어떠한 값이 들어있는 칸의 인덱스 주소를 찾아서, id 라는 변수에 할당하고, 배열 A의  id에 해당하는 칸에 대해서만 값을 뽑아내어 새로운 A2를 만든다는 것이다.

id = find (~isnan(A));
A2 = A(id);

 

이렇게 하면 NAN이 아닌 값들의 주소(id)를 찾아서 A2에 할당할 수 있다.

, 정리하자면 다음과 같이 활용하면 된다.

id = find (~isnan(X));  
X2 = X(id);  
Y2 = Y(id);
plot( Y2, X2 ); 		% X2와 Y2의 크기는 동일해야 함.

 

find 함수를 쓰지 않고, Boolean indexing 으로도 가능하다!

'초급-MATLAB 해양자료처리' 카테고리의 다른 글

MATLAB - NC 파일 읽기 - 해양 산성화  (0) 2023.09.16
MATLAB - Excel 파일 읽기 : 해양 산성화  (0) 2023.09.16
MATLAB - 제어문  (1) 2023.09.16
MATLAB - 배열 Array  (0) 2023.05.17
MATLAB 시작 - 4 : 실습  (0) 2023.04.25