R ggplot通过分组变量进行动态计算

R ggplot通过分组变量进行动态计算,r,ggplot2,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)

我经常想知道,您是否可以让
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()

编辑:(回答@42-评论)我主要是出于好奇问这是否可行,而不是因为替代方案不起作用。我还认为,如果我根据不同的列或在不同的数据集中对不同的变量进行求和(或其他类似的计算),而不是不断地分组、变异然后绘图,那么我的代码会更整洁。我可以编写一个函数来为我做这件事,但我认为这可能是我缺少的内置功能(ggplot帮助没有深入到真正的细节)

我已将
stat\u apply\u group()
stat\u apply\u panel()
添加到我的包“ggpmisc”的开发版本中。由于上一次更新刚刚被接受,因此需要一段时间才能将此更新发送到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)
库(ggplot2)
图书馆(ggpmisc)
种子集(123456)

df似乎最好通过创建一个新的变量来处理这个问题,该变量是cumsum done group-wise。一点也不清楚为什么“替代方案”不那么理想。谢谢,我更新了一些关于为什么我要询问的解决方案是使用
compute\u组
函数而不是
compute\u面板
函数创建
ggplot2::stat\u summary()
的修改版本。另一种解决方案是编写一个新的统计数据,例如
stat\u apply\u group()
(为什么不同时编写一个
stat\u apply\u panel()
)来应用任何合适的函数。(令人有点惊讶的是,它们似乎还没有上市……)
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)