我们可以绘制如下框图:
qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")
并指向:
qplot(factor(cyl), mpg, data = mtcars, geom = "point")
你如何将两者结合起来 - 但只是为了在框顶部显示一些特定点(比如何时wt
小于2)?
答案 0 :(得分:5)
如果你试图用两个不同的数据集绘制两个geom(mtcars的boxplot,文字值的data.frame的点),这是一种方法,可以使你的意图清晰。这适用于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
答案 1 :(得分:1)
在+ 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),...
答案 2 :(得分:1)
您可以使用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
的数据被调整为仅包括按柱面分布的前四分之一的mpg数字。总的来说,我不确定这是不是很好的做法,因为我认为人们希望只看到胡须以外的点,但是你去了。