Excelでヒストグラム(度数分布図)

[追記] Windows版Office 2016ではグラフのメニューの中に「ヒストグラム」が加わった。現時点では製品版は bins を「ごみ箱」と誤訳している(gnutar先生のご指摘)。Office 365版は「ビン」に直っている。[追記の追記] このツイートのスレッド参照。

[追記] ピボットテーブルによる方法も教えていただいた。

はじめに

Excelでまともなヒストグラムは描けないと言われているので,挑戦した。TwitterやFacebookでいろいろ教えていただいたおかげで何とか描けるようになった。

「分析ツール」を使う

Excel 2013 で「分析ツール」のメニューが現れない場合は,ファイル→オプション→アドイン→設定で「分析ツール」にチェックを付け「OK」をクリック。「データ」タブの「データツール」「アウトライン」の並びに「分析」が加わり,その中に「データ分析」が入る。

Excel for Mac 2011 には「分析ツール」はない。「ヘルプ」はサードパーティの英語版アドインを薦める。

「データ分析」→「ヒストグラム」→「OK」で,「ヒストグラム」ダイアログボックスが現れるので,「入力範囲」にデータ列を,「データ区間」に階級の上限の列を入れる。

「データ区間」は昇順に並んでいる必要がある。例えば「10 20 30」であれば,実際のデータ区間は「10以下」「20以下」「30以下」「30超」になる(つまり区間の右端が区間に含まれる)。

「0台(0以上10未満)」「10台」「20台」と並ぶ必要があるならば,整数値に限れば「データ区間」を「9 19 29」とすればよい。実数値の場合は,「分析ツール」は諦めたほうがよい。

同様に,FREQUENCYという関数もあるが,やはり区間の右端が区間に含まれる方式しか対応していないようである。

COUNTIFまたはCOUNTIFSを使う

546
135
130.3
232.5
106.3
115.2
196.2
294.3
199.2
199.2
721.2
619.5
1323
906.7
234.7
108.2
116.3
79.9
85.2
213.2
206.1
373.5
742.7
184
141.5
262.5
885.6
557.1
139
98.8
58.2
70.7
193.6
284.8
143.1
77.6
98.9
141.5
75.2
508.5
84.3
140.8
180.7
118.5
112.6
169
140.9

右のデータは2012年10月1日現在の47都道府県の人口(万人)である。このヒストグラムを描く。

この数値をコピーして,ExcelシートのA1:A47にペーストする。

C1に「区間の下限」,C2に「0」,C3に「50」と入力し,C2:C3を選択して,フィルハンドル(選択したセルの右下に現れる小さな黒い正方形)をC29までドラッグする。

D1に「範囲」,D2に「=C2&"-"&C3」と入力し,D2のフィルハンドルをD28までドラッグする。

E1に「度数」,E2に「=COUNTIFS($A$1:$A$47,">="&C2,$A$1:$A$47,"<"&C3)」と入力し,E2のフィルハンドルをE28までドラッグする。

ヒストグラム0

D1:E28を選択し,グラフの「集合縦棒」を選ぶ。次のようなグラフが現れる。

ヒストグラム1

このままでは使いものにならない。

「グラフのレイアウト」「グラフのスタイル」から,良さそうなものを適当に選ぶと,少しましになる。不要な要素(凡例など)は消す。グラフの題名も消すほうがよい(配置先の文書にキャプションとして入れるのが一般的)。

グラフ全体を選択し,「グラフエリアの書式設定」で,まずは「線」を「自動」から「線なし」にする。これでグラフ全体を囲む枠が消える。これは必須。また,「フォント」が「MS Pゴシック」などになっていたら,すぐに変更する。Windowsならとりあえず「メイリオ」にする。Macなら「ヒラギノ角ゴシック」を選びたいところだが,Windowsの人に送ることを考えれば「メイリオ」がいいかもしれない。英数字用はCalibriになっていればそのままでよい。あるいはSegoe UIにする。

軸の線が灰色になっていれば,「軸の書式設定」で「自動」ではなく明示的に黒にする。

棒グラフの棒そのものは,「データ系列の書式設定」で「塗りつぶし」の色が「自動」ではグラデーションがかかるので,特定の色にする。また,連続量のヒストグラムでは棒と棒がくっついている必要があるので,そうなっていなければ「オプション」で「要素の間隔」を0にする。ここまでの段階で次のようになる。

ヒストグラム2

これなら何とか見ることができる。しかし,区間の幅が狭くなると,下の目盛が見にくい。

グラフ全体をクリックして,「グラフデータの選択」で,「X/項目軸のラベル」を,区間の下限であるC2:C28に変更する。これで横目盛は 0 50 100 150 … になった。その横目盛をクリックし,「軸の書式設定」のメニューを出し,「目盛」の「縦軸と交差する項目番号」「ラベルの間隔」「目盛の間隔」「軸からのラベルの距離」がそれぞれ 1 1 1 100 になっているのを,1 4 4 100 ほどに直す。続いて,「種類」で,「目盛の種類」を「外向き」にする。最後に,「テキストボックス」で,テキストのレイアウトが「中心」「横書き」「0°」になっているのを確認し,「ユーザー指定の角度」を「0°」ではなく「1°」くらいにする。

ヒストグラム3

まずまずの出来である。別解もあるようであるが省略する。

(比較)Rで描いてみる

人口のデータはいろいろな都道府県別データにもある。千人単位なので,10で割って万人単位に直す。

population = c(5460, 1350, 1303, 2325, 1063, 1152, 1962, 2943, 1992,
  1992, 7212, 6195, 13230, 9067, 2347, 1082, 1163, 799, 852, 2132, 2061,
  3735, 7427, 1840, 1415, 2625, 8856, 5571, 1390, 988, 582, 707, 1936,
  2848, 1431, 776, 989, 1415, 752, 5085, 843, 1408, 1807, 1185, 1126,
  1690, 1409) / 10
par(mgp=c(2,0.8,0))  # 軸ラベル位置の微調整
par(las=1)           # y軸ラベルを水平にする
hist(population, breaks=20, col="#0068b7", main="", xlab="人口(万人)", ylab="")
Rで描いたヒストグラム

(中澤先生から,Excelに合わせるなら breaks=0:28*50 のほうがよいとご指摘をいただきました。確かにそうでした。また,色もExcelとかなり違うものを選んでしまいました。時間があったら直します。)

(↑と書きながら,ちっとも直していません🙇‍♂️。グラフの例:ヒストグラムやPythonのヒストグラムについてもご参照ください。)


Last modified: