我的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轴为分数,垂直堆叠基于时间点。任何人都可以帮助我吗?
谢谢!
答案 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))