以下のように箱ひげ図を描くことができます。
qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")
そして次のように指します:
qplot(factor(cyl), mpg, data = mtcars, geom = "point")
両方をどのように組み合わせますか?ただしwt
、ボックスの上にいくつかの特定のポイント (2 未満の場合など) を表示するにはどうすればよいでしょうか?
2 つの異なるデータセット (mtcars の boxplot、リテラル値の data.frame のポイント) で 2 つの geom をプロットしようとしている場合、これは意図を明確にする方法です。これは、現在の (2016 年 9 月) バージョンの ggplot ( ggplot2_2.1.0
)で動作します。
library(ggplot2)
ggplot() +
# box plot of mtcars (mpg vs cyl)
geom_boxplot(data = mtcars,
aes(x = factor(cyl), y= mpg)) +
# points of data.frame literal
geom_point(data = data.frame(x = factor(c(4,6,8)), y = c(15,20,25)),
aes(x=x, y=y),
color = 'red')
ポイントcolor = 'red'
のセットに を入れたので、それらの一部として生成されたポイントと簡単に区別できます。geom_boxplot
で使用+ geom_point(...)
します(すべてのポイントをプロットするには、をqplot
追加するだけです)。+ geom_point()
選択的にプロットするには、プロットするポイントを選択するだけです。
n <- nrow(mtcars)
# plot every second point
idx <- seq(1,n,by=2)
qplot( factor(cyl), mpg, data=mtcars, geom="boxplot" ) +
geom_point( aes(x=factor(cyl)[idx],y=mpg[idx]) ) # <-- see [idx] ?
事前にポイントを知っている場合は、直接フィードすることができます。例:
qplot( factor(cyl), mpg, data=mtcars, geom="boxplot" ) +
geom_point( aes(x=factor(c(4,6,8)),y=c(15,20,25)) ) # plot (4,15),(6,20),...
ggplot()
ではなくを使用して、両方を表示できますqplot()
。構文を理解するのは少し難しいかもしれませんが、通常はもっと多くのことができます。ボックス プロットとポイントの両方をプロットする場合は、次のように記述できます。
boxpt <- ggplot(data = mtcars, aes(factor(cyl), mpg))
boxpt + geom_boxplot(aes(factor(cyl), mpg)) + geom_point(aes(factor(cyl), mpg))
ボックスの上に特定のポイントをプロットするだけで何を意味するのかわかりませんが、ボックスの端の上にポイントを表示するだけの安価な(そしておそらくあまりスマートではない)方法が必要な場合は、次のとおりです。
boxpt + geom_boxplot(aes(factor(cyl), mpg)) + geom_point(data = ddply(mtcars, .(cyl),summarise, mpg = mpg[mpg > quantile(mpg, 0.75)]), aes(factor(cyl), mpg))
geom_point
に提供されるデータがシリンダーごとの分布の上位 4 分の 1 の mpg 数値のみを含むように調整されることを除いて、基本的には同じことです。一般的に、人々はひげの向こう側の点のみを期待していると思うので、これが良い習慣であるかどうかはわかりませんが、そうです。