通过分组变量

时间:2018-07-19 00:01:40

标签: r ggplot2

我经常想知道您是否可以让ggplot按图的构面组进行即时计算,就像使用dplyr::group_by进行计算一样。因此,在下面的示例中,是否可以在不先更改df的情况下计算每个不同类别的总和,而不是总总和?

library(ggplot2)

df <- data.frame(X = rep(1:20,2), Y = runif(40), category = rep(c("A","B"), each = 20))

ggplot(df, aes(x = X, y = cumsum(Y), colour = category))+geom_line()

我显然可以使用dplyr来进行简单的解决,但是由于我经常这样做,所以我很想知道是否有一种方法可以防止多次指定分组变量(在{{1}中) }和group_by

可以选择的方法,但在这种情况下不是我要的

aes(colour = …)

编辑:(要回答@ 42-评论),我主要是出于好奇而问这是否可行,不是因为替代方法不起作用。我还认为,如果我要绘制多个图,这些图基于不同的列或不同的数据集求和(或进行其他类似的计算)不同的变量,而不是连续地进行分组,变异然后绘制,那么这将变得更加整洁。我可以编写一个为我做的功能,但我认为它可能是我所缺少的内置功能(ggplot帮助没有涉及到真正的细节)。

1 个答案:

答案 0 :(得分:2)

我已经在软件包ggpmisc的开发版本中添加了stat_apply_group()stat_apply_panel()。由于先前的更新刚刚被接受,因此需要一段时间才能将其更新为CRAN。

暂时应从Bitbucket安装“ ggpmisc”,以使新统计信息可用。

devtools::install_bitbucket("aphalo/ggpmisc", ref = "no-debug")

然后这解决了问题:

library(ggplot2)
library(ggpmisc)
set.seed(123456)
df <- data.frame(X = rep(1:20,2),
                 Y = runif(40),
                 category = rep(c("A","B"), each = 20))
ggplot(df, aes(x = X, y = Y, colour = category)) +
  stat_apply_group(.fun.y = cumsum)

enter image description here

在ggplot代码中应用cumsum()而不是像第二个示例中那样使用'dplyr'“ pipe”,这使我们不必两次指定分组。