使用 ggplot2,如何仅通过用于创建分组箱线图的两个因素之一来标记 x 轴?

Using ggplot2, how can I label the x axis by only one of the two factors used to create a grouped boxplot?

我想我的问题很简单,但是谷歌搜索和大惊小怪让我无处可去。希望这里有人可以提供帮助。我有三年来从两个不同治疗组收集的数据。我想为治疗和年份的每种组合生成一个箱线图(以查看治疗效果是否因年份而异)。 但是,我不知道如何按照我想要的方式标记 x 轴 ggplot2.

这里有一些代码可以创建一些类似于我自己的伪造数据。

fakeX = factor(rep(c(0,1), times=60))
fakeY = factor(rep(c(1,2,3), each=40))
fakeZ = round(runif(120, 0, 12), digits=1)
df1 = data.frame(fakeX, fakeY, fakeZ)
df1$inter = interaction(df1$fakeX, df1$fakeY)

ggplot(df1, aes(x=inter, y = fakeZ)) + 
stat_boxplot(geom='errorbar', lwd=1.75) + 
geom_boxplot(outlier.size=5, lwd = 1.75, fatten=1.25, 
fill = rep(c("dim gray", "ivory3"), times=3), aes(fill=fakeY)) +
scale_x_discrete(labels = c("2013", "", "2014", "", "2015", ""))

这段代码生成了一组箱线图,就像我正在寻找的那样:

到目前为止一切顺利。然而,正如您所看到的,我已经用颜色标记了处理方法(图标题将解释哪个是哪个),所以我只需要我的轴标签来说明每组两个箱线图来自哪一年但是,我无法弄清楚将年份标签居中的代码 正好 在两个箱线图之间,每个箱线图都是 ,这就是我认为这将是最明确的事情。现在,我能做的最好的事情就是将年份标签与每年的 first 箱线图放在一起。我试过在 scale_x_discrete 中使用 breaks 参数,但没有用。我也试过将 position=position_nudge() 调用传递给 scale_x_discrete,但这也没有用。如果我在轴标签前添加空格,那么我可以伪造我正在寻找的东西,但我必须反复试验才能获得每个图表所需的空格数,而且看起来好像有必须是更好的方法。有什么想法吗?

一个比我上面的评论更具体的例子:

ggplot(df1,aes(x = fakeY,y = fakeZ,fill = fakeX)) + 
    stat_boxplot(geom = "errorbar",position = "dodge",lwd = 1.75) +
    geom_boxplot(position = "dodge",lwd = 1.75,fatten = 1.25,show.legend = FALSE) + 
    scale_fill_manual(values = c("dim gray", "ivory3")) + 
    scale_x_discrete(labels = c('2013','2014','2015'))