在连续的x轴上,按组填充和躲避箱线图

16

我一直在遇到一个看起来很简单的问题:用连续的x轴制作分组箱线图。

以下是一些最小数据:

df <- cbind(expand.grid(x=1:10, rep=1:20, fill=c("A", "B")), y=runif(400))

这是我想要的;你会看到我已经强制使x轴离散化:

ggplot(df, aes(x=as.factor(x), y=y,  fill=fill)) + geom_boxplot()

如果我在没有分组的情况下将x保持连续,那么我得到的结果如下:

enter image description here

ggplot(df, aes(x=x, y=y,  fill=fill)) + geom_boxplot()

添加分组后,颜色消失了:

输入图片描述

 ggplot(df, aes(x=x, y=y, group=x, fill=fill)) + geom_boxplot()

输入图像描述

明确一点,在geom_point中我想要的是:

ggplot(df, aes(x=x, y=y, group=x, color=fill)) + geom_point(position=position_dodge(width=.7))

输入图像描述

...但如果我尝试在箱线图中设置一个躲避(dodge):

ggplot(df, aes(x=x, y=y, color=fill)) + geom_boxplot(position=position_dodge(width=.7))

输入图像描述

有什么提示吗?我已经尝试了搜索:这个问题 解决了连续变量的箱线图,但没有解决颜色问题;这个问题 让我想知道是否需要设置交互作用,但似乎无法得到所需的结果。任何帮助都将不胜感激!


我知道这不是你要求的,但你可以通过在x上按区间分组来实现类似的效果(取决于数据是否适用)。ggplot(df, aes(x=cut_interval(x=x, length=1), y=y, fill=fill)) + geom_boxplot() - S Rivero
2个回答

23

来自?aes_group_order:

默认情况下,组被设置为绘图中所有离散变量的交互。

在您的数据中,只有一个离散变量"fill"。然而,我们希望将数据按"fill"和"x"两个变量分组。因此,我们需要使用group参数指定所需的分组方式。是的,您是正确的,interaction是可行的方法。

首先,使用稍微较小的数据集(更容易将数据与输出链接):

d <- data.frame(x = rep(c(1, 2, 4), each = 8),
                grp = rep(c("a", "b"), each = 4),
                y = sample(24))

然后,我们将数据按不同的"x"和"grp" (interaction(x, grp))组合,并通过"grp"进行填充框:

ggplot(d, aes(x = x, y = y, group = interaction(x, grp), fill = grp)) +
  geom_boxplot()

enter image description here


1
这是一个可用的版本,专为您自己的切割尺寸定制:

取原始df:

{df <- cbind(expand.grid(x=1:10, rep=1:20, fill=c("A", "B")), y=runif(400))}

使用cut()定义您想要的x组位置,并使用"dodge2"定位您的图形:
{ggplot(df, aes(x = cut(x, 5), y = y, fill = fill)) +
        geom_boxplot(position = "dodge2", outlier.alpha = 0.1)}

使用等间隔割点将1:10分为5组的箱线图 使用等间隔割点将1:10分为5组的箱线图


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