前回の記事で2つのヒストグラムを重ねてそれぞれのバーの上にラベルを表示させるということをしました。
(↓こんなの)
しかし、このラベルの位置は「data1のデータ量分(counts)をy軸方向にオフセット」ということをしているので、常にdata1のほうがdata2より大きい場合はいいのだが、data1よりdata2のほうがcountsが大きい場合はそうもいかない。
このようにdata2の方が大きい場合でもdata1分のcountしかオフセットされないので、バーの中にラベルが入ってしまう。
やっぱりdata1の方が大きいバーはdata1のcounts分、data2の方が大きい場合はdata2のcounts分オフセットされたい。
そこで新しくラベルのオフセット用のベクトルデータを作成する。
hoge <- c()
data1のヒストグラムもdata2のヒストグラムもそれぞれ作成した際に戻り値が手に入る。
戻り値のうち、それぞれのバーのデータの数は$countsに入っていると前述した。
data1とdata2のcountsは以下のとおりである。
data1$counts
[1] 37 157 313 445 472 354 230 131 71 36 12 1 2 0 0 0
data2$counts
[1] 0 3 7 5 19 39 69 97 105 96 73 70 50 31 24 9
これらを比較して、高い値の方を新規で作成したラベル用ベクトルに格納すればよい。
比較はforとifでおこなった
for (i in 1:k){
if (data1$counts[i] >= data2$counts[i])
hoge[i] <- data1$counts[i]
else
hoge[i] <- data2$counts[i]
}
1行目:以下の作業をk(ヒストグラムの階級数)回繰り返す
2行目:data1のcountsの[i]個目がdata2のcountsの[i]個目より同じかそれ以上のとき
3行目:ベクトルhogeの[i]個目にdata1のcountsの[i]個目の数字を格納
4行目:そうでない場合
5行目:ベクトルhogeの[i]個目にdata2のcountsの[i]個目の数字を格納
という具合。(他に賢い方法があるかと思いますが)
hogeを確認してみると
[1] 37 157 313 445 472 354 230 131 105 96 73 70 50 31 24 9
きちんと多きほうの数字が格納されているようだ。
あとはtextをその数字分y軸方向に動かしてやればご覧のとおり
ちゃんと値が高いほうのバーにあわせてラベルが表示されました。