- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!箱ひげ図を描く
標準で、boxplot()という関数があるが、ggplot()シリーズにも、geom_boxplot()が用意されている。
gg1 = df %>% ggplot() + aes(x = カテゴリ変数, y = 分布を見るcontinuous変数) + geom_boxplot()
! 横にしたい
箱ひげ図は縦よりも横のほうが表現が実態を表しやすいことがある。例えば、量の分布は縦が良いが、時間の分布は横のほうがイメージにある。
箱ひげ図は縦よりも横のほうが表現が実態を表しやすいことがある。例えば、量の分布は縦が良いが、時間の分布は横のほうがイメージにあう。
横にしたい場合、
箱ひげ図を横にしたい場合、
gg1 + coord_flip()
で時計回りに-pi/2ほど回転する。逆に反時計回りにpi/2回転させたい時は、
で時計回りに90度ほど回転する。逆に反時計回りに90度回転させたい時は、上記の時計回りのイメージを鏡にするように、Y軸を逆向きにする。
gg2 = gg1 + coord_flip() + scale_y_reverse() + ylim(50,0)
を加える。scale_y_reverse()はY軸を右から左へ降順にする。ylim()は、表示範囲を拾い上げる際に指定する変数が、見た目の左、右の順序であり、理屈通りの小さい値、大きい値という順序ではないことに注意。
!! データを補足したい
さらに、boxplot()を見ていて分散は分かるが、気になるのが各カテゴリのそもそものデータ件数。これを描き加えるには、
gg2 + geom_text(stat = "count", aes( label = stat(count), y = 0, size = 5, )
yはラベルをつけるy軸の場所、sizeはラベルのフォントのサイズ、color=で色つけも可能だがなるべく着色は避けたい。
!! データを明示するやり方
r-wakalangで@yutannihilationさんから教わった方法。最初に表示するデータを明示的に作っておいたほうがよいとのこと。
library(ggplot2)
library(dplyr)
cnt <- mtcars %>%
group_by(cyl) %>%
summarise(count = n(), mpg = quantile(mpg, 0.5)) #ここでcntオブジェクトに変数countを生成しておく
ggplot(mtcars) +
aes(mpg, cyl, group = cyl) +
geom_boxplot() +
geom_label(data = cnt, aes(label = count)) + #ここで表示用データにのcntオブジェクトを指定し、装飾ラベルにcount
scale_x_reverse()
* ggplot()では各レイヤーごとにデータやマッピングを指定するのが原則で、シンプルなときにはggplot()やaes()で全体に通用するデータを加えていくこと「も」できる。この理解を逆にしていたのを教わった。