ExcelExcelのヒストグラムの外形をRのそれに似せるためのあれこれアウトライン言うまでもなくバッドノウハウの範疇に入るネタ的な備忘録です。手段が目的化し生産性を著しく犠牲にすること請け合いですので,Rの使えない環境でhist()関数によるヒストグラムのシンプルな機能美というかそんな外形が非常に恋しくなってきたときにでも参照ください。作図のためのアルゴリズムを再現するような積極的なものではありません(むろん筆者にはその能もありませんが)。グラフィカルな要素のみに執着します。xlim=c(0,100))を実行すると下の図のようなヒストグラムが返ります(もちろんRによるもの。明記しない場合は以下に同じ)。オプションをまったく指定せずにhist(member$age)を実行すると下の図のようなヒストグラムが返ります。Case2として以下Case1の場合は青緑の各部位を調整する(オレンジはあきらめ!)ことで“だいたい似せる”ための簡潔な方法をCase2では青緑に加え青い部位も調整(より正しくは偽装)していくことで“かなり似せる”ためのちょっと込み入った方法を扱います。再計算や図の拡大縮小機能による利便性をできるだけ殺さないよう,両者とも「図形」機能による偽装は用いないとした縛りをつけます。0のRでの作例のような軸の表示範囲(0-100)とするため,最初と最後に度数0の階級をとった度数分布表を用意します(最初の度数0階級は本頁の趣旨から必要だと考えます)。「ダミー」列見出し直下の数字は最大度数(Max関数にて),「水平線」列は見出し直下のセルを除いてすべてを0で埋めます(両端に度数0の階級をとる場合の施策。その他の場合は後述)。階級値(ここでは階級下限)列(A列)の見出しを空にして表の領域をすべて選択し,集合縦棒グラフをつくります。2軸の振り替え「度数」系列を第2軸に振り替え,要素の間隔を0にします。ともに散布図に変更します。この変更にともない“第2軸”チェックボックスに意図せぬチェックマークが入ったら,それを解除しておきます。第2縦軸をなくします。第2横軸をつくります。第2横軸の目盛をなくし,ラベルの位置を“下端/左端”に変更します。以下に同じ)の最小値・最大値を度数分布表によるRangeと一致させます。0のRのアウトプットと同じになるよう,ここでは20とします(任意)。Graphicsと類似のもの(筆者の環境ではArialだと思われます)に指定し,あわせてサイズも調整しておきます。同様にして,縦軸(第1縦軸。以下に同じ)の最小値|最大値|目盛間隔を指定します。最小値は0,最大値は最大度数以上で,目盛間隔は任意に定めます。目盛・線色・フォントも先と同じように設定します。第2横軸を選択し,フォントサイズを下げながら横軸と棒との頃合い間隔を探っていきます。これが決まったら文字色を白に変え不可視とします。線色を黒に,線幅を横軸等と違和感の出ない程度の太さに調整した上で,マーカーをなくします。1E-3といった微小値で代替できるかどうか試してみるといいかもしれません(両端以外に度数0の階級がない場合は後の作業で見た目の辻褄が合うので,無視するという選択肢もアリです)。[度数分布表の最後に度数0の階級をとらなかった場合]水平線を図の右端まで引くためにダミーの階級を用意し,下図のように「水平線」系列のデータ範囲のみ増やして対処します。先と同様,今度は「ダミー」系列のマーカーをなくします。13凡例等グラフ要素の削除グラフタイトル,凡例,目盛り線,軸線色等邪魔なものを必要に応じて削除します。「度数」系列の棒を白抜きにします。縦軸目盛の値を左へ90°傾けます。縦横をアバウトに等比とし,必要に応じてラベルなどを追加して目的のヒストグラムの完成です。最初の階級に“度数0の階級”をとった度数分布表を用意します(最下行の度数0階級はRangeとの兼ね合いを見て任意に挿入。挿入することによって目盛間隔が取りやすくなる場合などに)。「ダミー」列見出し直下の数字は最大度数,「水平線」列は見出し直下のセルを除いてすべてを0で埋めます(両端に度数0の階級をとる場合の施策。その他の場合は後述)。度数分布表の隣には下図のような見出しを作成しておきます。階級値(ここでは階級下限)列(A列)の見出しを空にして表の領域をすべて選択し,集合縦棒グラフをつくります。2軸の振り替え「度数」系列を第2軸に振り替え,要素の間隔を0にします。ともに散布図に変更します。この変更にともない“第2軸”チェックボックスに意図せぬチェックマークチェックが入ったら,それを解除しておきます。以下に同じ)の最小値・最大値を度数分布表によるRangeと一致させます。この作例での目盛間隔は意味をなしませんので無視します。第2縦軸をなくします。線色を黒に,線幅を横軸等と違和感の出ない程度の太さに調整した上で,マーカーをなくします。1E-3といった微小値で代替できるかどうか試してみるといいかもしれません(両端以外に度数0の階級がない場合は後の作業で見た目の辻褄が合うので,無視するという選択肢もアリです)。[度数分布表の最後に度数0の階級をとらなかった場合]水平線を図の右端まで引くためにダミーの階級を用意し,下図のように「水平線」系列のデータ範囲のみ増やして対処します。7ダミー系列の不可視化つづけて「ダミー」系列のマーカーもなくします。度数分布表の隣に,縦横軸とそれらの目盛に関する座標を作成します。