LoginSignup
2

More than 5 years have passed since last update.

Rでヒストグラムを描く(ラベルについて補足)

Last updated at Posted at 2016-05-16

前回の記事で2つのヒストグラムを重ねてそれぞれのバーの上にラベルを表示させるということをしました。
(↓こんなの)

image

しかし、このラベルの位置は「data1のデータ量分(counts)をy軸方向にオフセット」ということをしているので、常にdata1のほうがdata2より大きい場合はいいのだが、data1よりdata2のほうがcountsが大きい場合はそうもいかない。

image

このように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軸方向に動かしてやればご覧のとおり
image

ちゃんと値が高いほうのバーにあわせてラベルが表示されました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2