6

首先,一个简单的例子来设置舞台:

set.seed(123)
dat <- data.frame( 
  x=rep( c(1, 2, 4, 7), times=25 ), 
  y=rnorm(100), 
  gp=rep(1:2, each=50) 
)

p <- ggplot(dat, aes(x=factor(x), y=y))
p + geom_boxplot(aes(fill = factor(gp)))

我想制作一个类似的图,除了控制每组箱线图的 x 位置。我的第一个猜测是使用非因子x美学来控制这些箱形图沿 x 轴的位置。然而,一旦我尝试这样做,它似乎geom_boxplot并没有像我希望的那样解释美学。

p + geom_boxplot( aes(x=x, y=y, fill=factor(gp)) )

特别是,geom_boxplot当它们不是因素时,似乎以某种方式崩溃了所有 x 值。

有没有办法x用 ggplot2 控制箱线图的位置?通过指定因子美学的每个级别之间的距离,更巧妙地使用非因子美学,还是其他方式?

4

2 回答 2

5

您可以使用scale_x_discrete()设置 x 轴的位置(刻度)。

p <- ggplot(dat, aes(x=factor(x), y=y))
p + geom_boxplot(aes(fill = factor(gp))) + 
    scale_x_discrete(limits=1:7)
于 2013-01-25T19:35:30.377 回答
5

您也可以通过group美学来做到这一点。但是,我不确定为什么你不能只传递xgroup. 这不起作用:

ggplot() + 
  geom_boxplot(data=dat, aes(x=x, y=y, fill=factor(gp), group=x))

但这确实:

ggplot() + 
  geom_boxplot(data=dat, aes(x=x, y=y, fill=factor(gp), group=paste(x, gp)))
于 2013-01-25T19:39:32.850 回答