首先,设置阶段的快速示例:
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)))
Run Code Online (Sandbox Code Playgroud)

我想制作一个类似的情节,除了控制每组箱图的x位置.我的第一个猜测是使用非因素x美学来控制沿着这些箱形图的x轴的位置.然而,一旦我尝试这样做,似乎geom_boxplot并没有像我希望的那样解释美学.
p + geom_boxplot( aes(x=x, y=y, fill=factor(gp)) )
Run Code Online (Sandbox Code Playgroud)

特别是,geom_boxplot当它们是非因素时,似乎以某种方式崩溃所有x值.
有没有办法x用ggplot2 控制箱线图的位置?要么通过指定因子美学的每个层次之间的距离,要么更巧妙地使用非要素美学,否则?
您可以使用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)
Run Code Online (Sandbox Code Playgroud)
你也可以用group美学来做到这一点.但是,我不确定为什么你不能只是传递x给group.这不起作用:
ggplot() +
geom_boxplot(data=dat, aes(x=x, y=y, fill=factor(gp), group=x))
Run Code Online (Sandbox Code Playgroud)
但这样做:
ggplot() +
geom_boxplot(data=dat, aes(x=x, y=y, fill=factor(gp), group=paste(x, gp)))
Run Code Online (Sandbox Code Playgroud)