7

我们可以画出如下箱线图:

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

并指出:

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

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

4

3 回答 3

9

如果您尝试使用两个不同的数据集绘制两个几何图形(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

在此处输入图像描述

于 2016-09-07T03:28:38.583 回答
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] ?

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

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),...
于 2012-02-13T04:57:37.493 回答
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 数字。一般来说,我不确定这是一个好的做法,因为我认为人们希望看到的只是胡须之外的点,但你去了。

于 2012-02-13T05:08:09.247 回答