カテゴリカル ヒストグラムの表示の制御
この例では、histogram
を使用して categorical データを効果的に表示する方法を説明します。名前と値のペア 'NumDisplayBins'
、'DisplayOrder'
、および 'ShowOthers'
を使用することにより、カテゴリカル ヒストグラムの表示を変更できます。これらのオプションは、データをより適切に整理してプロットでのノイズを減らすのに役立ちます。
カテゴリカル ヒストグラムの作成
サンプル ファイル outages.csv
には、米国における電力会社の停電を表すデータが含まれています。このファイルには、Region
、OutageTime
、Loss
、Customers
、RestorationTime
、および Cause
の 6 つの列があります。
outages.csv
ファイルを table として読み取ります。'Format'
オプションを使用して、各列に含まれるデータの種類を categorical ('%C'
)、浮動小数点数値 ('%f'
)、または datetime ('%D'
) で指定します。最初の数行のデータにインデックスを指定して、変数を確認します。
data_formats = '%C%D%f%f%D%C'; C = readtable('outages.csv','Format',data_formats); first_few_rows = C(1:10,:)
first_few_rows=10×6 table
Region OutageTime Loss Customers RestorationTime Cause
_________ ________________ ______ __________ ________________ _______________
SouthWest 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 winter storm
SouthEast 2003-01-23 00:49 530.14 2.1204e+05 NaT winter storm
SouthEast 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 winter storm
West 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
MidWest 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 severe storm
West 2003-06-18 02:49 0 0 2003-06-18 10:54 attack
West 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 equipment fault
West 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 equipment fault
NorthEast 2003-07-16 16:23 239.93 49434 2003-07-17 01:12 fire
MidWest 2004-09-27 11:09 286.72 66104 2004-09-27 16:37 equipment fault
変数 Cause
のカテゴリカル ヒストグラムをプロットします。histogram オブジェクトのハンドルを返す出力引数を指定します。
h = histogram(C.Cause); xlabel('Cause of Outage') ylabel('Frequency') title('Most Common Power Outage Causes')
ヒストグラムの正規化を 'probability'
正規化を使用するように変更し、それぞれの停電の原因の相対頻度を表示します。
h.Normalization = 'probability'; ylabel('Relative Frequency')
表示順序の変更
'DisplayOrder'
オプションを使用して、ビンを最大からから最小の順に並べ替えます。
h.DisplayOrder = 'descend';
表示されるバーの数に切り捨て
'NumDisplayBins'
オプションを使用して、プロットに 3 本のバーのみを表示します。非表示のデータもそのまま正規化で考慮されるため、表示されている確率を足しても 1 ではなくなります。
h.NumDisplayBins = 3;
除外データの集計
'ShowOthers'
オプションを使用して、除外されたすべてのバーを集計します。これにより、表示されている確率を足したものが再度 1 になります。
h.ShowOthers = 'on';
表示データへの正規化の制限
R2017a より前は、関数 histogram
および関数 histcounts
によって、正規化の計算に "ビン化" されたデータのみが使用されていました。この動作は、データの一部がビンの範囲から外れた場合、正規化の目的では無視されていたことを意味します。しかし、MATLAB® R2017a では動作が変更され、常に入力データの要素の総数を使用して正規化されるようになりました。新しい動作はより直感的ですが、以前の動作の方が望ましい場合は、いくつかの特別な手順を実行して、正規化をビン化されたデータのみに制限する必要があります。
入力データすべてを対象として正規化するのではなく、確率の正規化の対象を、ヒストグラムに表示されているデータに制限することができます。単純に histogram オブジェクトの Data
プロパティを更新して、他のカテゴリを削除します。Categories
プロパティには、ヒストグラムに表示されるカテゴリが反映されます。setdiff
を使用して 2 つのプロパティ値を比較し、Categories
内にないカテゴリを Data
から削除します。この結果による undefined
の categorical 要素をすべてデータから削除し、表示されるカテゴリの要素のみを残します。
h.ShowOthers = 'off';
cats_to_remove = setdiff(categories(h.Data),h.Categories);
h.Data = removecats(h.Data,cats_to_remove);
h.Data = rmmissing(h.Data);
3 つの残されたカテゴリのみに基づいて正規化されるようになったため、3 つのバーを足したものが 1 になります。