[matlab, #10] .mat 파일에서 변수 불러오기 및 groupbar 제작하기

0. 배경

항적 비교 분석을 수행하게 되면서 2018년과 2019년 데이터를 비교해야 하는 상황이다. 그런데, 두 연도의 결과물을 하나의 .m 파일에서 분석을 하기에는 코드가 복잡해지고, 통제가 불가능해질 것이라 판단하였다. 그래서 2018년과 2019년 각각의 .m파일을 생성하고 결과물을 2019년으로 불러와 비교 분석하려는 계획을 세웠다. 이 때 다른 .mat 파일에서 특정 변수를 불러오는 코드가 필요한데, load() 함수가 해당 역할을 수행한다. 이에 대해서 자세히 알아볼 예정이다.
두 번째 알아볼 사항은 2018년과 2019년 결과물을 비교하는 그래프를 제작하는 것이다. 비교에 적합한 다양한 그래프가 존재하지만, 오늘은 groupbar를 제작하고 errorbar를 입력하는 방법을 알아본다.

1. .mat 파일에서 변수 불러오기

1.1 코드

% 1. 현재폴더 이동
oldFolder = cd('C:\Users\rnjsv\Desktop\PBN\2.code\2018_2019\2018');

% 2. 데이터 불러오기
% 2-1. 방법1
load('flight_data_2018Jan_inFIR_altitudes_20210914.mat', 'time_cal_collection_2018');
load('flight_data_2018Jan_inFIR_altitudes_20210914.mat', 'result_segmentation_2018');
load('flight_data_2018Jan_inFIR_altitudes_20210914.mat', 'avg_lat_AGAVO_2018');

% 2-2. 방법2
load handel.mat y

% 3. 이전 폴더로 이동
cd(oldFolder);

1.2 설명

데이터를 불러오는 핵심 코드는 '2. 데이터 불러오기'에서 찾을 수 있다. 변수를 불러오는 방법은 크게 두 가지다. 두 가지 방법의 가장 큰 차이는 괄호의 존재 여부이다. 첫 번째 방법은 괄호를 쓰는 방법이다. 위 코드에서 보듯이 세 코드 의미는 'flight_data_2018Jan_inFIR_altitudes_20210914'라는 '.mat' 파일에서 'time_cal_collection_2018', 'result_segmentation_2018' 또는 'avg_lat_AGAVO_2018' 변수를 불러오는 것이다. 두 번째 코드는 괄호가 없는 방법이다. 'handel'이라는 '.mat'파일에서 y 변수를 불러오는 코드이다.

1번과 3번 코드는 현재 폴더에 원하는 파일이 존재하지 않을 경우 사용하면 유용하다. 1번에 포함되는 코드는 현재폴더를 기억하며 다른 폴더로 이동하는 코드이다. 2번 코드는 현재 폴더로 되돌아오는 코드이다. 파일이 현재 폴더에 존재한다면 사용할 필요가 없다.

참고로, 스트럭처 변수를 또다른 변수에 할당하면 2번 접근해야 하는 불편함이 생기니, 왠만하면 변수에 할당하지 않는 것이 편리하다.

2. groupbar 제작하기

2.1 코드

% 1. 데이터 입력하기
num_of_status_20182019(1:length_count_by_points_airports, 1) = [1:length_count_by_points_airports]; % 2018, 2019 동일 (length=33)

data_agv_20182019 = [time_cal_collection_2018(:,1), time_cal_collection_2019(:,1)]; % 33 by 2
stdhigh_20182019 = [time_cal_collection_2018(:,3), time_cal_collection_2019(:,3)]; % 33 by 2
stdlow_20182019  = [time_cal_collection_2018(:,3), time_cal_collection_2019(:,3)]; % 33 by 2

% 2. 그룹화된 바 그래프 그리기
b_avg_20182019 = bar(data_agv_20182019);

% 3. 에러바 그리기
er_2018 = errorbar(num_of_status_20182019(:,1)-0.15, data_agv_20182019(:,1), stdhigh_20182019(:,1), stdlow_20182019(:,1));
er_2018.Color = [0 0 0];
er_2018.LineStyle = 'none';  % 라인간 잇는 선 없애기

er_2019 = errorbar(num_of_status_20182019(:,1)+0.15, data_agv_20182019(:,2), stdhigh_20182019(:,2), stdlow_20182019(:,2));
er_2019.Color = [0 0 0];
er_2019.LineStyle = 'none';  % 라인간 잇는 선 없애기

2.2 그림

2.3 설명

코드가 길지만 2가지(2번, 3번)를 설명한다.
첫 번째, 2번은 그룹화된 바 그래프를 그리는 코드이다. 그룹화된 그래프를 제작하기 위해서는 데이터 형태가 중요하다. 데이터 제작은 1번에서 수행하는데, 우측 코드 형태(% 표시)를 보다시피 33×2 형태로 구성되어 있다. 그룹화된 바 그래프가 제작될 때 사용되는 bar() 함수는 입력된 데이터의 row 1개를 1개의 그룹으로 인식하는 것을 알 수 있다. 33개 row니까 33개의 그룹이 형성되고, 한 그룹당 2개의 데이터가 존재하니 총 66개의 그래프를 그리게 되는 것이다.
두 번째, 그룹화된 바 그래프를 제작했으니 에러바를 그릴 차례이다. 그룹화된 바 그래프가 아닌 때처럼 코드를 작성하면 2개의 에러바가 2개의 그래프 중간에 겹치게 된다. 이를 해결하는 방법은 2018년과 2019년(파란색과 빨간색) 각 그래프의 위치를 조정해 주는 것이다. 해당 코드는 3번에서 확인할 수 있다. 예를 들어, er_2018의 errorbar 함수 내 첫 번째 인자에 보면 '-0.15'가 명시되어 있다. 이 것이 의미하는 바는 에러바의 위치를 x축에서 왼쪽으로 0.15만큼 옮기라는 것이다. 반면 2019년 에러바는 '+0.15'를 명령함으로서 오른쪽으로 0.15만큼 옮겨 그려질 것이다.

좋은 웹페이지 즐겨찾기