你会如何在同一个地块上绘制一个箱形图和特定点?

时间:2012-02-13 04:48:19

标签: r ggplot2 boxplot

我们可以绘制如下框图:

qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")

并指向:

qplot(factor(cyl), mpg, data = mtcars, geom = "point") 

你如何将两者结合起来 - 但只是为了在框顶部显示一些特定点(比如何时wt小于2)?

3 个答案:

答案 0 :(得分:5)

如果你试图用两个不同的数据集绘制两个geom(mtcars的boxplot,文字值的data.frame的点),这是一种方法,可以使你的意图清晰。这适用于ggplot(ggplot2_2.1.0

的当前(2016年9月)版本
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

中生成的点区分开来

enter image description here

答案 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数字。总的来说,我不确定这是不是很好的做法,因为我认为人们希望只看到胡须以外的点,但是你去了。