평행좌표 플롯을 사용하여 테이블 데이터 탐색하기
이 예제에서는 파일을 MATLAB®에 테이블로 가져와서, 테이블 형식 데이터에서 평행좌표 플롯을 생성하고, 플롯 모양을 수정하는 방법을 보여줍니다.
평행좌표 플롯은 여러 열을 갖는 테이블 형식 데이터나 행렬 데이터를 시각화하는 데 유용합니다. 입력 데이터의 행은 플롯의 선에 해당하고 입력 데이터의 열은 플롯의 좌표에 해당합니다. 플롯의 선을 그룹화하면 데이터의 추세를 더 잘 확인할 수 있습니다.
파일을 테이블로 가져오기
2015년 1월부터 2016년 7월까지의 평균 일일 온도가 포함된 표본 파일 TemperatureData.csv
를 불러옵니다. 파일을 테이블로 읽어오고 처음 몇 개 행을 표시합니다.
tbl = readtable('TemperatureData.csv');
head(tbl)
Year Month Day TemperatureF ____ ___________ ___ ____________ 2015 {'January'} 1 23 2015 {'January'} 2 31 2015 {'January'} 3 25 2015 {'January'} 4 39 2015 {'January'} 5 29 2015 {'January'} 6 12 2015 {'January'} 7 10 2015 {'January'} 8 4
기본 평행좌표 플롯 만들기
테이블의 처음 몇 개 행에서 평행좌표 플롯을 만듭니다. 플롯의 각 선은 테이블의 행 하나에 해당합니다. 기본적으로 parallelplot
은 테이블의 모든 좌표 변수를 테이블에 나타나는 것과 동일한 순서로 표시합니다. 해당하는 좌표 눈금자 아래에 좌표 변수 이름이 표시됩니다.
플롯을 보면 테이블의 처음 8개 행이 2015년 1월 처음 8일 동안의 온도 데이터를 제공함을 알 수 있습니다. 예를 들어, 8일 중 여덟 번째 날이 평균적으로 가장 추웠습니다.
parallelplot(head(tbl))
기본적으로 MATLAB은 플롯을 쉽게 해석할 수 있도록 좌표 눈금자를 따라 플롯 선이 완전히 중첩되지 않도록 데이터를 임의로 벌려 보여줍니다. 이를 지터링이라고 합니다. 예를 들어, 처음 8개의 관측값이 동일한 Year
값과 Month
값을 갖더라도 Year
좌표 눈금자의 2015
눈금이나 Month
좌표 눈금자의 January
눈금에서 플롯 선은 동일한 선상에 놓이지 않습니다. 지터링은 모든 좌표 변수에 눈금 간 거리를 고려하여 영향을 주며, 종종 범주형 좌표 눈금자의 경우에는 더 눈에 띄는 영향을 줍니다. Jitter
속성을 설정하여 플롯의 지터링 정도를 제어할 수 있습니다.
Year
좌표 눈금자의 일부 눈금은 무의미한 소수점 이하 값입니다. 좌표 눈금자의 눈금이 유의미한 값에만 대응하도록 하려면 categorical
함수를 사용하여 변수를 범주형 변수로 변환하십시오.
tbl.Year = categorical(tbl.Year);
이제 전체 테이블을 사용하여 평행좌표 플롯을 만듭니다. ParallelCoordinatesPlot
객체를 변수 p
에 할당하고 플롯을 만든 후 p
를 사용하여 수정합니다. 예를 들어, Title
속성을 사용하여 플롯에 제목을 추가해 보겠습니다.
p = parallelplot(tbl)
p = ParallelCoordinatesPlot with properties: SourceTable: [565x4 table] CoordinateVariables: {'Year' 'Month' 'Day' 'TemperatureF'} GroupVariable: '' Use GET to show all properties
p.Title = 'Temperature Data';
플롯 선 그룹화하기
GroupVariable
속성을 설정하여 Year
값 기준으로 플롯의 선을 그룹화합니다. 기본적으로 MATLAB은 플롯에 범례를 추가합니다. LegendVisible
속성을 'off'
로 설정하여 범례를 제거할 수 있습니다.
p.GroupVariable = 'Year';
대화형 방식으로 좌표 변수 재배열하기
좌표 변수를 더욱 쉽게 비교하여 플롯에 남길 변수를 결정할 수 있도록 대화형 방식으로 재배열해 보겠습니다.
Figure 창에서 플롯을 여십시오. 좌표 눈금 레이블을 클릭하고 연결된 좌표 눈금자를 원하는 위치로 끌어서 놓습니다. 선택된 좌표 눈금자는 검은색 사각형으로 표시됩니다. 예를 들어, Month
좌표 눈금 레이블을 클릭하고 좌표 눈금자를 오른쪽으로 끌어서 놓을 수 있습니다. 그런 다음 Month
값과 TemperatureF
값을 쉽게 비교할 수 있습니다.
좌표 변수를 대화형 방식으로 재배열하면 플롯의 연결된 CoordinateTickLabels
, CoordinateVariables
및 CoordinateData
속성이 업데이트됩니다.
추가적인 상호 작용 옵션은 Tips 항목을 참조하십시오.
좌표 변수 중 일부 선택하기
p.SourceTable
에 있는 좌표 변수의 일부를 표시하고 p
의 CoordinateVariables
속성을 설정하여 플롯에서 좌표 변수의 순서를 지정합니다.
구체적으로 설명하자면, 플롯에서 Day
변수를 제거하고 소스 테이블의 네 번째 열에 있는 TemperatureF
변수를 플롯의 두 번째 좌표로 표시합니다.
p.CoordinateVariables = [1 4 2];
또는 선택한 변수에 대해 변수 이름으로 구성된 string형 배열이나 셀형 배열 또는 true
요소를 갖는 논리형 벡터를 사용하여 CoordinateVariables
속성을 설정할 수 있습니다.
좌표 변수의 범주 수정하기
Month
에 일부 범주를 표시하고 플롯의 좌표 눈금자를 따라 범주 순서를 변경합니다.
일부 월에는 두 연도 중 한 연도에 대한 데이터만 있으므로, 소스 테이블에서 이러한 특이한 월에 해당하는 행을 제거합니다. 소스 테이블이 변경되면 MATLAB에서 플롯을 업데이트합니다.
uniqueMonth = {'September','October','November','December','August'}; uniqueMonthIdx = ismember(p.SourceTable.Month,uniqueMonth); p.SourceTable(uniqueMonthIdx,:) = [];
소스 테이블을 업데이트하여 Month
좌표 눈금자에 월을 시간 순으로 정렬합니다.
categoricalMonth = categorical(p.SourceTable.Month); newOrder = {'January','February','March','April','May','June','July'}; orderMonth = reordercats(categoricalMonth,newOrder); p.SourceTable.Month = orderMonth;
비닝된 값을 사용하여 플롯 선 그룹화하기
각 월의 온도 범위를 더 잘 시각화하려면 discretize
를 사용하여 온도 데이터를 비닝하고 비닝된 값을 사용하여 플롯의 선을 그룹화하십시오. 소스 테이블의 최소 온도와 최대 온도를 확인합니다. 이러한 값을 포함하도록 Bin 경계값을 설정합니다.
min(p.SourceTable.TemperatureF)
ans = -3
max(p.SourceTable.TemperatureF)
ans = 80
binEdges = [-3 10:10:80]; bins = {'00s+/-','10s','20s','30s','40s','50s','60s','70s+'}; groupTemperature = discretize(p.SourceTable.TemperatureF, ... binEdges,'categorical',bins);
비닝된 온도를 소스 테이블에 추가합니다. 비닝된 온도 데이터에 따라 플롯의 선을 그룹화합니다.
p.SourceTable.GroupTemperature = groupTemperature;
p.GroupVariable = 'GroupTemperature';
GroupTemperature
에는 8개 이상의 범주가 포함되어 있으므로 일부 그룹은 플롯에서 색이 같습니다. Color
속성을 설정하여 모든 그룹에 각기 다른 색을 할당합니다.
p.Color = jet(8);
참고 항목
함수
parallelplot
|table
|readtable
|reordercats
|categorical
|discretize