平行座標プロットを使用した table データの参照
この例では、ファイルを table として MATLAB® にインポートし、表形式データから平行座標プロットを作成し、プロットの外観を変更する方法を説明します。
平行座標プロットは、複数の列をもつ表形式データまたは行列データを可視化する際に便利です。入力データの行はプロット内のラインに対応し、入力データの列はプロット内の座標に対応します。プロット内のラインをグループ化すると、データのトレンドをより適切に確認できます。
ファイルを table としてインポート
2015 年 1 月から 2016 年 7 月までの毎日の平均気温を含んだサンプル ファイル TemperatureData.csv を読み込みます。ファイルを table に読み取り、最初の数行を表示します。
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
基本的な平行座標プロットの作成
table の最初の数行から平行座標プロットを作成します。プロット内の各ラインは、table 内の 1 行に対応します。既定では、parallelplot は table 内のすべての座標変数を、table 内の表示と同じ順序で表示します。ソフトウェアでは、座標変数名は、対応する座標ルーラーの下に表示されます。
プロットは、table の最初の 8 行が、2015 年 1 月の最初の 8 日間の気温データを提供することを示します。たとえば、その 8 日間の中で 8 日目の平均気温が最も低くなっています。
parallelplot(head(tbl))

プロットの解釈に役立つよう、MATLAB は既定でプロット ラインにランダムに微変動を起こし、座標ルーラーに沿って完全にオーバーラップすることがないようにします。たとえば、最初の 8 回の観測値は、Year と Month の値が同じですが、プロット ラインは、Year 座標ルーラーの 2015 の目盛りや Month 座標ルーラーの January の目盛りで重なっていません。ジッターはすべての座標変数に影響しますが、目盛り間の距離に依存するため、多くの場合は categorical 座標ルーラーでより顕著になります。プロット内のジッターの量は、Jitter プロパティを設定することによって制御できます。
Year 座標ルーラーの目盛りの一部は、意味のない 10 進数であることに注意してください。座標ルーラーの目盛りを意味のある値のみに対応させるには、関数 categorical を使用して、変数を categorical 変数に変換します。
tbl.Year = categorical(tbl.Year);
ここで、table 全体から平行座標プロットを作成します。ParallelCoordinatesPlot オブジェクトを変数 p に割り当て、p を使用して、作成後にプロットを変更します。たとえば、Title プロパティを使用してタイトルをプロットに追加します。
p = parallelplot(tbl)
p =
ParallelCoordinatesPlot with properties:
SourceTable: [565×4 table]
CoordinateVariables: {'Year' 'Month' 'Day' 'TemperatureF'}
GroupVariable: ''
Show all properties
p.Title = 'Temperature Data';
プロット ラインのグループ化
GroupVariable プロパティを設定することにより、Year の値に従ってプロット内のラインをグループ化します。既定では、MATLAB はプロットに凡例を追加します。凡例は、LegendVisible プロパティを 'off' に設定することによって削除できます。
p.GroupVariable = 'Year';
座標変数の対話的再配置
座標変数を対話的に再配置して比較しやすくし、どの変数をプロットに保持するかを決定します。
Figure ウィンドウにプロットを開きます。座標の目盛りラベルをクリックし、関連付けられた座標ルーラーを、選択した場所へとドラッグします。ソフトウェアによって、選択した座標ルーラーの輪郭が黒い四角形で描かれます。たとえば、Month 座標の目盛りラベルをクリックして、座標ルーラーを右にドラッグできます。すると、Month と TemperatureF の値が比較しやすくなります。

座標変数を対話的に再配置すると、プロットの関連する CoordinateTickLabels プロパティ、CoordinateVariables プロパティ、および CoordinateData プロパティが更新されます。
対話機能オプションの詳細については、ヒントを参照してください。
座標変数のサブセットの選択
p.SourceTable 内の座標変数のサブセットを表示し、p の CoordinateVariables プロパティを設定してプロット内の順序を指定します。
具体的には、変数 Day をプロットから削除し、ソース table の 4 番目の列にある変数 TemperatureF を、プロット内の 2 番目の座標として表示します。
p.CoordinateVariables = [1 4 2];

あるいは、変数名の string 配列か cell 配列、または選択した変数の true 要素をもつ logical ベクトルを使用して、CoordinateVariables プロパティを設定できます。
座標変数でのカテゴリの変更
Month 内のカテゴリのサブセットを表示し、プロット内の座標ルーラーに沿ったカテゴリの順序を変更します。
2 年のうち 1 年分のデータのみが存在する月もあるため、そのような単独月に対応する行をソース table で削除します。MATLAB では、ソース table を変更するとすぐにプロットが更新されます。
uniqueMonth = {'September','October','November','December','August'};
uniqueMonthIdx = ismember(p.SourceTable.Month,uniqueMonth);
p.SourceTable(uniqueMonthIdx,:) = [];
ソース table を更新することにより、Month 座標ルーラーに沿って時系列順に月を配置します。
categoricalMonth = categorical(p.SourceTable.Month);
newOrder = {'January','February','March','April','May','June','July'};
orderMonth = reordercats(categoricalMonth,newOrder);
p.SourceTable.Month = orderMonth;
ビン化された値を使用したプロット ラインのグループ化
各月の気温の範囲をより見やすくするために、discretize を使用して気温データをビン化し、ビン化された値を使用してプロット内のラインをグループ化します。ソース table 内で最低気温と最高気温を確認します。これらの値が含まれるようにビン エッジを設定します。
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);ビン化された気温をソース table に追加します。ビン化された気温データに従って、プロット内のラインをグループ化します。
p.SourceTable.GroupTemperature = groupTemperature;
p.GroupVariable = 'GroupTemperature';
GroupTemperature には 7 つを超えるカテゴリが含まれているため、一部のグループはプロット内で同じ色になります。Color プロパティを設定して、グループごとに別々の色を割り当てます。
p.Color = jet(8);

参考
関数
parallelplot|table|readtable|reordercats|categorical|discretize