平行座標プロットを使用した table データの参照
この例では、ファイルを table として MATLAB® にインポートし、表形式データから平行座標プロットを作成し、プロットの外観を変更する方法を説明します。
平行座標プロットは、複数の列をもつ表形式データまたは行列データを可視化する際に便利です。入力データの行はプロット内のラインに対応し、入力データの列はプロット内の座標に対応します。プロット内のラインをグループ化すると、データのトレンドをより適切に確認できます。
ファイルを table としてインポート
2015 年 1 月から 2016 年 7 月までの毎日の平均気温を含んだサンプル ファイル TemperatureData.csv
を読み込みます。ファイルを table に読み取り、最初の数行を表示します。
tbl = readtable('TemperatureData.csv');
head(tbl)
ans=8×4 table
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: [565x4 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