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

Nee*_*rav 4 r ggplot2 boxplot

我们可以绘制如下框图:

qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")
Run Code Online (Sandbox Code Playgroud)

并指向:

qplot(factor(cyl), mpg, data = mtcars, geom = "point") 
Run Code Online (Sandbox Code Playgroud)

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

arv*_*000 6

如果您尝试使用两个不同的数据集绘制两个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')
Run Code Online (Sandbox Code Playgroud)

我投入了一color = 'red'组点,所以很容易将它们与作为一部分生成的点区分开来geom_boxplot

在此输入图像描述


mat*_*fee 2

使用+ 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] ?
Run Code Online (Sandbox Code Playgroud)

如果您事先知道要点,则可以直接输入它们,例如:

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),...
Run Code Online (Sandbox Code Playgroud)

  • 你知道为什么我会收到这样的错误:错误:美学必须是长度1或与数据(32)相同:x,y (2认同)