计算ggplot2中堆积条的累计和

Calculating the cumulative sum for stacked bars in ggplot2

假设一个 R 数据框 (testData) 包含三列(名为 DATEFREQ_RECORDSCRITERION)和配对数据(列 CRITERION 包含值 "positive" 或 "negative").

testData = structure(list(DATE = structure(c(18140, 18140, 18170, 18170, 18201, 18201), class = "Date"), FREQ_RECORDS = c(57L, 120L, 302L, 64L, 40L, 20L), CRITERION = structure(c(1L, 2L, 1L, 2L, 1L, 2L), .Label = c("positive", "negative"), class = "factor")), row.names = c(395L, 756L, 396L, 757L, 397L, 758L), class = "data.frame")

我想通过 ggplot2 将数据可视化为在配对因子内(但不跨越)累积的闪避条(即,最终条的高度应为 57+302+40= "positive" 为 399,"negative" 为 120+64+20=204)。

我错误地认为下面的代码会产生这样的情节:

ggplot(data=testData, aes(x=DATE, y=cumsum(testData[,"FREQ_RECORDS"]), fill=CRITERION), width=1) + 
    geom_bar(stat="identity", position="dodge", alpha=0.5) + 
    theme_minimal()

为了获得所需的结果,上述代码有什么不正确的地方,我需要如何更正它? 注意:我认为是累计和如何计算的问题(即cumsum(testData[,"FREQ_RECORDS"]),但不确定细节。

当您执行 cumsum(testData["FREQ_RECORDS"]) 时,它会应用于所有 FREQ_RECORDS。按 fill=.. 分组将相应地分开您的 x 和 y 值并绘制..

所以也许试试这个,不幸的是你不能即时绘制它(我认为):

df<-testData %>% 
group_by(CRITERION) %>%
mutate(CUMFREQ=cumsum(FREQ_RECORDS))

ggplot(data=df, aes(x=DATE, y=CUMFREQ, fill=CRITERION), width=1) + 
    geom_bar(stat="identity", position="dodge", alpha=0.5) + 
    theme_minimal()