根据r中的时间点绘制垂直堆叠线

时间:2015-04-14 19:42:40

标签: r plot ggplot2 stack line

我的df是这样的:

TEST ID  C1  C2  C3  C4  C5  C6  C7
A    22 112 112 118 121 124 NA  NA
B    22  77 89  85  89  88  95  100
C    22  67 85  76  77  77  84  92
D    22  58 81  73  75  79  84  95

C1,C2,C3 ......代表不同的时间点。每行代表不同的测试在这个df中,学生22已经在测试A上测试了5次,在测试B,C和D上测试了7次。

我打算使用ggplot2来创建垂直堆叠的折线图,其中x轴为四个测试,y轴为分数,垂直堆叠基于时间点。任何人都可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

可能有帮助

library(tidyr)
library(ggplot2)

gather(df, Var, Val, C1:C7) %>% 
            filter(!is.na(Val)) %>%
            ggplot(. , aes(x=TEST, y=Val, fill=Var))+
            geom_bar(stat='identity')

更新

这些是一些选择。

df1 <- gather(df, Var, Val, C1:C7) %>% 
                               filter(!is.na(Val))

ggplot(df1, aes(x=TEST, y=Val, colour=Var))+
                geom_area(aes(fill=Var), position='stack')

或者

 ggplot(df1, aes(x=as.numeric(factor(TEST)), y=Val, fill=Var)) +
                                      geom_area(position='stack')

或者

 group_by(df1, TEST) %>%
    mutate(Val1=cumsum(Val)) %>%
    ggplot(., aes(x=as.numeric(factor(TEST)), y=Val1, color=Var)) + 
    geom_line() + 
    xlab('TEST') +
    ylab('Score') +
    scale_x_discrete(breaks=as.numeric(factor(df2$TEST)), 
             labels=df2$TEST)

数据

df <- structure(list(TEST = c("A", "B", "C", "D"), ID = c(22L, 22L, 
22L, 22L), C1 = c(112L, 77L, 67L, 58L), C2 = c(112L, 89L, 85L, 
81L), C3 = c(118L, 85L, 76L, 73L), C4 = c(121L, 89L, 77L, 75L
), C5 = c(124L, 88L, 77L, 79L), C6 = c(NA, 95L, 84L, 84L), C7 = c(NA, 
100L, 92L, 95L)), .Names = c("TEST", "ID", "C1", "C2", "C3", 
"C4", "C5", "C6", "C7"), class = "data.frame", row.names = c(NA, -4L))