ggplot2-因子水平的累积计数的geom_line

时间:2018-07-01 17:01:13

标签: r ggplot2

我想绘制因子OK(*)的级别X(*)随时间(列Date)的累积计数。我不确定最好的策略是什么,是否应该用摘要列创建一个新的数据框,或者是否有ggplot2的方式来做到这一点。

样本数据

DF <- data.frame(
  Date = as.Date(c("2018-01-01", "2018-01-01", "2018-02-01", "2018-03-01", "2018-03-01", "2018-04-01") ),
  X = factor(rep("OK", 6), levels = c("OK", "NOK")),
  Group = factor(c(rep("A", 4), "B", "B"))
)
DF <- rbind(DF, list(as.Date("2018-02-01"), factor("NOK"), "A"))

基于类似的问题,我尝试了以下方法:

ggplot(DF, aes(Date, col = Group)) + geom_line(stat='bin')

enter image description here

使用stat='count'(作为对this question的回答)更加糟糕:

ggplot(DF, aes(Date, col = Group)) + geom_line(stat='count')

enter image description here

显示因子水平(*)的计数,但不显示随时间的累积。

绝望的测量-用table

计数

我尝试使用table创建一个具有计数的新数据框,如下所示:

cum <- as.data.frame(table(DF$Date, DF$Group))
ggplot(cum, aes(Var1, cumsum(Freq), col = Var2, group = Var2)) +
  geom_line()

enter image description here

是否可以用ggplot2做到这一点?我是否需要使用cumsum创建一个新列?如果是这样,我该如何按日期cumsum DF[X == "OK"]

(*)观察员:我可以过滤数据框以仅使用click使用预期的级别,但是我敢肯定有人会找到更聪明的解决方案。

1 个答案:

答案 0 :(得分:3)

使用dplyrggplot2的一个选项可以是:

library(dplyr)
library(ggplot2)

DF %>% group_by(Group) %>%
       arrange(Date) %>%
       mutate(Value = cumsum(X=="OK")) %>%
      ggplot(aes(Date, y=Value, group = Group, col = Group)) + geom_line()

enter image description here

相关问题