我经常想知道您是否可以让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帮助没有涉及到真正的细节)。
答案 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)
在ggplot代码中应用cumsum()
而不是像第二个示例中那样使用'dplyr'“ pipe”,这使我们不必两次指定分组。