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