Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

boxchart

ボックス チャートの作成 (箱ひげ図)

説明

boxchart(ydata) は行列 ydata の各列に対してボックス チャート (箱ひげ図) を作成します。ydata がベクトルの場合、boxchart は単一のボックス チャートを作成します。

各ボックス チャートには、中央値、上位四分位数、下位四分位数、すべての外れ値 (四分位数間範囲を使用して計算)、外れ値でない最小値と最大値の各情報が表示されます。詳細については、ボックス チャート (箱ひげ図)を参照してください。

boxchart(xgroupdata,ydata)xgroupdata の一意の値に従ってベクトル ydata のデータをグループ化し、データの各グループを個別のボックス チャートとしてプロットします。xgroupdata は各ボックス チャートの x 軸上の位置を決定します。ydata はベクトルでなければならず、xgroupdata の長さは ydata と同じでなければなりません。

boxchart(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して追加のチャート オプションを指定します。たとえば、'Notch','on' を指定してノッチを使用することにより、サンプルの中央値を比較できます。名前と値のペアの引数は、その他すべての入力引数の後に指定します。プロパティの一覧については、BoxChart のプロパティ を参照してください。

boxchart(ax,___) は、現在の座標軸 (gca) の代わりに ax によって指定される座標軸にプロットします。ax 引数は、前述の構文における任意の入力引数の組み合わせの前で指定できます。

b = boxchart(___)BoxChart オブジェクトを返します。b を使用してボックス チャートの作成後にプロパティを設定します。プロパティの一覧については、BoxChart のプロパティ を参照してください。

すべて折りたたむ

年齢のベクトルから単一のボックス チャートを作成します。ボックス チャートを使用して年齢の分布を理解します。

patients データセットを読み込みます。変数 Age には患者 100 名の年齢が含まれています。ボックス チャートを作成して、年齢の分布を可視化します。

load patients
boxchart(Age)
ylabel('Age (years)')

患者の年齢の中央値である 39 歳は、ボックス内の線として示されます。上位四分位数と下位四分位数の 32 歳と 44 歳はそれぞれ、ボックスの上端と下端として示されます。ひげの終点は、最も年齢の低い患者と、最も年齢の高い患者に対応しています。最も年齢の低い患者は 25 歳で、最も年齢の高い患者は 50 歳です。このデータセットには小さい円で表される外れ値は含まれていません。

データ ヒントを使用してデータの統計の概要を取得できます。ボックス チャートの上にカーソルを合わせてデータ ヒントを表示します。

ボックス チャートを使用して魔方陣の列および行に沿った値の分布を比較します。

10 列 10 行の魔方陣を作成します。

Y = magic(10)
Y = 10×10

    92    99     1     8    15    67    74    51    58    40
    98    80     7    14    16    73    55    57    64    41
     4    81    88    20    22    54    56    63    70    47
    85    87    19    21     3    60    62    69    71    28
    86    93    25     2     9    61    68    75    52    34
    17    24    76    83    90    42    49    26    33    65
    23     5    82    89    91    48    30    32    39    66
    79     6    13    95    97    29    31    38    45    72
    10    12    94    96    78    35    37    44    46    53
    11    18   100    77    84    36    43    50    27    59

魔方陣の列ごとにボックス チャートを作成します。各列の中央値は類似しています (50 前後)。しかし、Y の最初の 5 列は Y の最後の 5 列よりも四分位数間範囲が大きくなっています。四分位数間範囲は上位四分位数 (ボックスの上端) と下位四分位数 (ボックスの下端) との間の距離です。

boxchart(Y)
xlabel('Column')
ylabel('Value')

魔方陣の行ごとにボックス チャートを作成します。各行の四分位数間範囲は類似していますが、中央値は行間で異なります。

boxchart(Y')
xlabel('Row')
ylabel('Value')

発生した月に基づいて地震のマグニチュードをプロットします。地震マグニチュードのベクトルと、地震ごとの月を示すグループ化変数を使用します。データのグループごとに、ボックス チャートを作成して、x 軸上の指定した位置に配置します。

津波データのセットをワークスペースに table として読み取ります。このデータセットには地震だけでなく、津波のその他の原因に関する情報も含まれています。table の月、原因、地震マグニチュードの列を示す、最初の 8 行を表示します。

tsunamis = readtable('tsunamis.xlsx');
tsunamis(1:8,["Month","Cause","EarthquakeMagnitude"])
ans=8×3 table
    Month          Cause           EarthquakeMagnitude
    _____    __________________    ___________________

     10      {'Earthquake'    }            7.6        
      8      {'Earthquake'    }            6.9        
     12      {'Volcano'       }            NaN        
      3      {'Earthquake'    }            8.1        
      3      {'Earthquake'    }            4.5        
      5      {'Meteorological'}            NaN        
     11      {'Earthquake'    }              9        
      3      {'Earthquake'    }            5.8        

table earthquakes を作成します。これには地震によって発生した津波のデータが含まれます。

unique(tsunamis.Cause)
ans = 8×1 cell
    {0×0 char                  }
    {'Earthquake'              }
    {'Earthquake and Landslide'}
    {'Landslide'               }
    {'Meteorological'          }
    {'Unknown Cause'           }
    {'Volcano'                 }
    {'Volcano and Landslide'   }

idx = contains(tsunamis.Cause,'Earthquake');
earthquakes = tsunamis(idx,:);

対応する津波が発生した月に基づいて、地震マグニチュードをグループ化します。月ごとに、個別のボックス チャートを表示します。たとえば、boxchart では 4 番目、5 番目、8 番目の地震マグニチュードなどを使用し、3 番目の月に対応する 3 番目のボックス チャートを作成します。

boxchart(earthquakes.Month,earthquakes.EarthquakeMagnitude)
xlabel('Month')
ylabel('Earthquake Magnitude')

月の値は数値であるため、x 軸ルーラーも数値であることに注意してください。

月の名前を説明的にする場合は、earthquakes.Month 列を変数 categorical に変換します。

monthOrder = ["Jan","Feb","Mar","Apr","May","Jun","Jul", ...
    "Aug","Sep","Oct","Nov","Dec"];
namedMonths = categorical(earthquakes.Month,1:12,monthOrder);

前と同じボックス チャートを作成しますが、数値の月ではなく categorical 変数 namedMonths を使用します。x 軸ルーラーが categorical になったため、namedMonths のカテゴリの順序により、ボックス チャートの順序が決まります。

boxchart(namedMonths,earthquakes.EarthquakeMagnitude)
xlabel('Month')
ylabel('Earthquake Magnitude')

医療患者を年齢に基づいてグループ化し、年齢グループごとに拡張期血圧値のボックス チャートを作成します。

patients データセットを読み込みます。変数 Age および変数 Diastolic には患者 100 名の年齢と拡張期血圧レベルが含まれます。

load patients

これらの患者を 5 つの年齢のビンにグループ化します。最低年齢と最高年齢を求めてから、その間の範囲を 5 つの年齢のビンに分割します。関数 discretize を使用し、変数 Age で値をビン化します。bins でビンの名前を使用します。結果の変数 groupAge は変数 categorical になります。

min(Age)
ans = 25
max(Age)
ans = 50
binEdges = 25:5:50;
bins = {'late 20s','early 30s','late 30s','early 40s','late 40s+'};
groupAge = discretize(Age,binEdges,'categorical',bins);

年齢グループごとにボックス チャートを作成します。各ボックス チャートには、そのグループの患者の拡張期血圧値が示されます。

boxchart(groupAge,Diastolic)
xlabel('Age Group')
ylabel('Diastolic Blood Pressure')

2 つのグループ化変数を 1 つに連結し、その変数を使用して結果のボックス チャートをグループ化して配置します。

2015 年 1 月から 2016 年 7 月までの毎日の平均気温を含んだサンプル ファイル TemperatureData.csv を読み込みます。ファイルを table に読み取ります。

tbl = readtable('TemperatureData.csv');

変数 tbl.Month と変数 tbl.Year を変数 categorical に変換します。各変数のカテゴリの順序を指定します。

monthOrder = {'January','February','March','April','May','June','July', ...
    'August','September','October','November','December'};
yearOrder = [2015 2016];
tbl.Month = categorical(tbl.Month,monthOrder);
tbl.Year = categorical(tbl.Year,yearOrder);

変数 tbl.Month と変数 tbl.Year を 1 つのグループ化変数 xgroupdata に連結します。月と年を組み合わせた期間中の気温の分布を示すボックス チャートを作成します。tbl には、データが含まれない月と年の組み合わせ (August 2016 など) があることに注意してください。

xgroupdata = tbl.Month.*tbl.Year;
boxchart(xgroupdata,tbl.TemperatureF)
ylabel('Temperature (F)')

この図では、複数の年にわたり特定の月の気温の分布を簡単に比較できます。たとえば、2 月の気温は 2015 年よりも 2016 年の変動が大きいことがわかります。気温を時系列で表示するには、xgroupdatatbl.Year.*tbl.Month に設定します。

ボックス チャートを作成し、hold on を使用してそのボックス チャート上にデータ値をプロットします。

patients データセットを読み込みます。患者を喫煙者と非喫煙者にグループ化します。ボックス チャートを使用して患者の各グループに対する拡張期血圧値を比較します。ボックス チャート上に個々の拡張期血圧値をプロットします。

load patients
boxchart(categorical(Smoker),Diastolic)
hold on
plot(categorical(Smoker),Diastolic,'x')
xlabel('Smoker')
ylabel('Diastolic Blood Pressure')
hold off

ノッチを使用して、中央値が相互に大きく異なるかどうかを判断します。

patients データセットを読み込みます。場所に基づいて患者を分割します。患者のグループごとに、体重のボックス チャートを作成します。'Notch','on' を指定して、各ボックスにノッチと呼ばれる、先細の影付き領域が含まれるようにします。ノッチがオーバーラップしているボックス チャートに大きく異なる中央値はありません。

load patients
boxchart(categorical(Location),Weight,'Notch','on')
ylabel('Weight (lbs)')

この例では、3 つのノッチがオーバーラップしており、3 つの体重の中央値は大きく異ならないことを示しています。

関数 tiledlayout と関数 nexttile を使用して、ボックス チャートのペアを並べて表示します。

patients データセットを読み込みます。Smoker を、より説明的なカテゴリ名 (10 ではなく、SmokerNonsmoker) をもつ変数 categorical に変換します。PoorFairGoodExcellent の各カテゴリは自然順をもつため、SelfAssessedHealthStatus を順序変数 categorical に変換します。

load patients
Smoker = categorical(Smoker,logical([1 0]),{'Smoker','Nonsmoker'});
healthOrder = {'Poor','Fair','Good','Excellent'};
SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus, ...
    healthOrder,'Ordinal',true);

関数 tiledlayout を使用して、2 行 1 列のタイル表示チャート レイアウトを作成します。関数 nexttile を呼び出して、最初の座標軸 ax1 のセットをその内部で作成します。座標軸には、喫煙者と非喫煙者に対する拡張期血圧値の 2 つのボックス チャートが表示されます。関数 nexttile を呼び出して、タイル表示チャート レイアウト内で座標軸 ax2 の 2 番目のセットを作成します。座標軸には、自己申告の健康状態で患者をグループ化した拡張期血圧値の 4 つのチャート ボックスが表示されます。'BoxFaceColor' の名前と値のペアの引数を使用して、ボックスの色を指定します。

tiledlayout(1,2)

% Left axes
ax1 = nexttile;
boxchart(ax1,Smoker,Diastolic)
ylabel(ax1,'Diastolic Blood Pressure')

% Right axes
ax2 = nexttile;
boxchart(ax2,SelfAssessedHealthStatus,Diastolic, ...
    'BoxFaceColor',[0 0.5 0.5])
xlabel(ax2,'Self-Assessed Health Status')
ylabel(ax2,'Diastolic Blood Pressure')

多数の外れ値をもつ停電データからボックス チャートを作成し、BoxChart オブジェクトのプロパティを変更することにより、それらを視覚的に簡単に区別できるようにします。外れ値エントリのインデックスを求めます。

停電データをワークスペースに table として読み取ります。table の最初の数行を表示します。

outages = readtable('outages.csv');
head(outages)
ans=8×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'}

BoxChart オブジェクト boutages.Customers 値から作成し、停電ごとに影響を受けた顧客の数を示します。boxchartNaN 値をもつエントリを破棄します。

b = boxchart(outages.Customers);
ylabel('Number of Customers')

このプロットには多くの外れ値が含まれます。これらを見やすくするために、外れ値にジッターを起こし、外れ値のマーカー スタイルを変更します。BoxChart オブジェクトの JitterOutliers プロパティを 'on' に設定すると、外れ値のマーカーは水平方向にランダムに変位するため、完全にオーバーラップする可能性は非常に低くなります。外れ値の値と縦方向の位置は変更されません。

b.JitterOutliers = 'on';
b.MarkerStyle = '.';

これで、外れ値の分布を簡単に確認できます。

外れ値のインデックスを求めるには、関数 isoutlier を使用します。boxchart の外れ値の定義と一致するように外れ値を計算する 'quartiles' メソッドを指定します。インデックスを使用して outages データのサブセットが含まれる outliers table を作成します。isoutlier で 96 個の外れ値が特定されたことがわかります。

idx = isoutlier(outages.Customers,'quartiles');
outliers = outages(idx,:);
size(outliers,1)
ans = 96

これらすべての外れ値により、ボックス チャートの四分位数が見づらくなっています。これらを挿入するには、y 軸の範囲を変更します。

ylim([0 4e5])

入力引数

すべて折りたたむ

サンプル データ。数値ベクトルまたは行列として指定します。

  • ydata が行列の場合、boxchartydata の列ごとにボックス チャートを作成します。

  • ydata がベクトルで、xgroupdata を指定しない場合、boxchart は単一のボックス チャートを作成します。

  • ydata がベクトルで、xgroupdata を指定する場合、boxchartxgroupdata の一意の値ごとにボックス チャートを作成します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

グループ化変数および配置変数。数値ベクトルまたは categorical ベクトルとして指定します。xgroupdata はベクトル ydata と同じ長さでなければなりません。ydata が行列の場合に xgroupdata を指定することはできません。

boxchartxgroupdata の一意の値に従って ydata のデータをグループ化します。この関数はデータのグループごとにボックス チャートを作成し、各ボックス チャートを対応する xgroupdata 値に配置します。通常の設定では、boxchart は垂直方向にボックス チャートを配置し、x 軸上に xgroupdata 値を表示します。ボックス チャートの方向は、Orientation プロパティを使用して変更できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical

ターゲット座標軸。Axes オブジェクトとして指定します。座標軸を指定しない場合、boxchart は現在の座標軸 (gca) を使用します。

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: boxchart([rand(10,4); 4*rand(1,4)],'BoxFaceColor',[0 0.5 0],'MarkerColor',[0 0.5 0]) は、適用される場合、緑のボックスと緑の外れ値を使用してボックス チャートを作成します。

ここでは、BoxChart プロパティの一部だけを紹介しています。完全な一覧については、BoxChart のプロパティ を参照してください。

ボックスの色。RGB 3 成分、16 進数カラー コード、色名、または省略名として指定します。

カスタム色を使用する場合は、RGB 3 成分または 16 進数カラー コードを指定します。

  • RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度値は [0,1] の範囲でなければなりません。たとえば [0.4 0.6 0.7] のようになります。

  • 16 進数カラー コードは、ハッシュ記号 (#) で始まり、3 桁または 6 桁の 0 から F までの範囲の 16 進数が続く文字ベクトルまたは string スカラーです。これらの値では大文字小文字は区別されません。したがって、カラー コード '#FF8800''#ff8800''#F80'、および '#f80' は等価です。

あるいは、名前を使用して一部の一般的な色を指定できます。次の表に、名前の付いた色オプション、等価の RGB 3 成分、および 16 進数カラー コードを示します。

色名省略名RGB 3 成分16 進数カラー コード外観
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

'none'該当なし該当なし該当なし色なし

MATLAB® の多くのタイプのプロットで使用されている既定の色の RGB 3 成分および 16 進数カラー コードを次に示します。

RGB 3 成分16 進数カラー コード外観
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

例: b = boxchart(rand(10,1),'BoxFaceColor','red')

例: b.BoxFaceColor = [0 0.5 0.5];

例: b.BoxFaceColor = '#EDB120';

外れ値スタイル。次の表にリストされたオプションのいずれかとして指定します。

説明
'o'
'+'プラス記号
'*'アスタリスク
'.'
'x'十字
'square' または 's'正方形
'diamond' または 'd'菱形
'^'上向き三角形
'v'下向き三角形
'>'右向き三角形
'<'左向き三角形
'pentagram' または 'p'星形五角形
'hexagram' または 'h'星形六角形
'none'マーカーなし

例: b = boxchart([rand(10,1);2],'MarkerStyle','x')

例: b.MarkerStyle = 'x';

外れ値マーカー変位。'on' または 'off' もしくは数値または logical 1 (true) または 0 (false) として指定します。'on' の値は true と等価であり、'off'false と等価です。したがって、このプロパティの値を logical 値として使用できます。値は matlab.lang.OnOffSwitchState 型の on/off logical 値として格納されます。

JitterOutliers プロパティを 'on' に設定すると、boxchart は外れ値のマーカーを XData 方向にランダムに変位するため、類似する ydata 値をもつ外れ値が区別しやすくなります。例については、外れ値の可視化と検出を参照してください。

例: b = boxchart([rand(20,1);2;2;2],'JitterOutliers','on')

例: b.JitterOutliers = 'on';

中央値比較表示。'on' または 'off' もしくは数値または logical 1 (true) または 0 (false) として指定します。'on' の値は true と等価であり、'off'false と等価です。したがって、このプロパティの値を logical 値として使用できます。値は matlab.lang.OnOffSwitchState 型の on/off logical 値として格納されます。

Notch プロパティを 'on' に設定すると、boxchart により、各中央値の周りに先細の影付き領域が作成されます。ノッチがオーバーラップしないボックス チャートには、5% の有意水準で異なる中央値があります。詳細については、ボックス チャート (箱ひげ図)を参照してください。

ノッチは下位四分位数と上位四分位数を超えて拡張できます。

例: b = boxchart(rand(10,2),'Notch','on')

例: b.Notch = 'on';

ボックス チャートの方向。'vertical' または 'horizontal' として指定します。通常の設定では、ボックス チャートの方向は垂直であるため、ydata 統計は y 軸に揃えられます。方向に関係なく、boxchartydata 値を BoxChart オブジェクトの YData プロパティに格納します。

例: b = boxchart(rand(10,1),'Orientation','horizontal')

例: b.Orientation = 'horizontal';

出力引数

すべて折りたたむ

ボックス チャート。BoxChart オブジェクトとして返されます。詳細については、BoxChart のプロパティ を参照してください。

詳細

すべて折りたたむ

ボックス チャート (箱ひげ図)

ボックス チャート (箱ひげ図) により、データ サンプルの要約統計の視覚的表現が提供されます。数値データを指定すると、対応するボックス チャートには、中央値、上位四分位数、下位四分位数、すべての外れ値 (四分位数間範囲を使用して計算)、外れ値でない最小値と最大値の各情報が表示されます。

  • 各ボックス内の線はサンプルの中央値です。関数 median を使用して中央値の値を計算できます。

  • 各ボックスの上端と下端はそれぞれ、上位四分位数と下位四分位数です。上端と下端の間の距離は四分位数間範囲 (IQR) です。

    四分位数を計算する方法の詳細については、quantileアルゴリズム (Statistics and Machine Learning Toolbox)を参照してください。ここで、上位四分位数は 0.75 四分位数に対応し、下位四分位数は 0.25 四分位数に対応します。関数 quantile を使用するには、Statistics and Machine Learning Toolbox™ ライセンスが必要です。

  • 外れ値は、ボックスの上端と下端から 1.5 · IQR を超えて離れている値です。通常の設定では、boxchart には 'o' 記号を使用した外れ値がそれぞれ表示されます。外れ値の計算は 'quartiles' メソッドを使用した関数 isoutlier と同じです。

  • ひげは、各ボックスの上下を超えている線です。一方のひげは上位四分位数を "最大非外れ値" (外れ値でない最大値) につなげ、もう一方は下位四分位数を "最小非外れ値" (外れ値でない最小値) につなげます。

  • ノッチは、複数のボックス チャートに対するサンプルの中央値を比較する場合に役立ちます。'Notch','on' を指定すると、関数 boxchart により、各中央値の周りに先細の影付き領域が作成されます。ノッチがオーバーラップしないボックス チャートには、5% の有意水準で異なる中央値があります。有意水準は標準の分布仮定に基づいていますが、中央値の比較はその他の分布に対して十分にロバストです。

    ノッチ領域の上端と下端は m+(1.57IQR)/nm(1.57IQR)/n にそれぞれ対応しています。ここで、m は中央値、IQR は四分位数間範囲、n は NaN 値を除いたデータ点数です。

Example box charts, with labels for the summary statistics

ヒント

  • 2 種類のデータ ヒントを BoxChart オブジェクトに追加できます。1 つは各ボックス チャート、もう 1 つは各外れ値に使用します。一般的なボックス チャートのデータ ヒントは、ボックス チャートでクリックする位置に関係なく、非外れ最大値で表示されます。表示された Num Points 値には対応する ydataNaN 値が含まれますが、ボックス チャートの統計を計算する前にboxchartNaN 値を破棄します。

  • 関数 datatip を使用してデータ ヒントを BoxChart オブジェクトに追加できますが、データ ヒントのインデックス付けが他のチャートと異なります。boxchart は最初にインデックスをボックス チャートに割り当ててから、インデックスを外れ値に割り当てます。たとえば、BoxChart オブジェクト b に 2 つのボックス チャートと 1 つの外れ値が表示される場合、datatip(b,'DataIndex',3) は外れ値点でデータ ヒントを作成します。

参考

関数

プロパティ

R2020a で導入