遇到错误:ggplot2_3.2.0无法为每个组绘制多个箱线图。

6
我有一个xy数据集,希望使用Rggplot进行绘图。
library(dplyr)
library(ggplot2)
set.seed(1)

df <- data.frame(group = unlist(lapply(LETTERS[1:5],function(l) rep(l,5))),
                 x = rep(1:5,5),
                 y = rnorm(25,2,1),
                 y.se = runif(25,0,0.1)) %>%
  dplyr::mutate(y.min = y-3*y.se,
                y.low = y-y.se,
                y.high = y+y.se,
                y.max = y+3*y.se)

如您所见,虽然df$x是一个点(integer),但df$y有一个相关的误差,我想使用箱线图来包含它。
因此,我的目的是通过其x坐标绘制df中的每一行,使用y.miny.lowyy.highy.max构造一个boxplot,并且通过group进行colorfill。这意味着,我想要将df中的每一行作为一个box绘制在单独的x-axis位置,并通过df$group进行分面,使得df$group A的五个重复出现在首位,然后是它们右侧的df$group B的重复,以此类推。
直到我刚刚安装了最新的ggplot2软件包(ggplot2_3.2.0),这段代码才能够实现我的目的:
ggplot(df,aes(x=x,ymin=y.min,lower=y.low,middle=y,upper=y.high,ymax=y.max,col=group,fill=group))+
geom_boxplot(position=position_dodge(width=0),alpha=0.5,stat="identity")+
facet_grid(~group,scales="free_x")+scale_x_continuous(breaks = integerBreaks())

现在我遇到了这个错误:
Error: Can't draw more than one boxplot per group. Did you forget aes(group = ...)?

有什么想法吗?

我遇到了同样的新错误,而且我的箱线图没有分组或方面。 - Simon Woodward
看起来他们修补了一些东西,现在需要组美学。https://github.com/tidyverse/ggplot2/issues/3316 - Simon Woodward
请查看网页 https://cran.r-project.org/web/packages/ggplot2/news/news.html(请参阅3.2.0)。 - Simon Woodward
2个回答

4
您需要为每个 xgroup 的组合制作单独的箱形图,因此您可以将组合美学设置为 interaction(x, group):
ggplot(df,aes(x=x,ymin=y.min,lower=y.low,middle=y,upper=y.high,
              ymax=y.max,col=group,fill=group))+
    geom_boxplot(aes(group = interaction(x, group)), 
                 position=position_dodge(width=0),
                 alpha=0.5,stat="identity")

谢谢@Marius,但这会使每个组的框出现在相同的x轴位置。我的意图是每个框都有单独的x轴位置。我已经相应地编辑了我的问题。 - dan
1
盒子出现在相同的x轴位置,因为您在position_dodge中设置了width = 0,我假设这是有意的。如果将width = 0.9,它们将会分散开来。 - Marius
谢谢!如何更改x轴的顺序,使其首先按df$group排序,然后再按df$x排序? - dan

4

这段代码在我安装了最新的ggplot2包(ggplot2_3.2.0)之前可以正常运行。

你是对的:我最近使用ggplot2绘制箱线图时遇到了类似的错误,并发现这个新错误与ggplot2的最新更新有关。 正如Marius已经指出的那样,在aes()中指定group也为我解决了问题。 但是,我不理解他答案的其余部分,因为它没有提供分面信息...

以下是使用facet_grid()得到的可工作解决方案,你离正确答案很接近:

ggplot(df,aes(x=x,ymin=y.min,lower=y.low,middle=y,upper=y.high,ymax=y.max,col=group,fill=group, group=x))+
geom_boxplot(position=position_dodge(width=0),alpha=0.5,stat="identity")+
facet_grid(~group,scales="free_x")

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接