ggplot2 自动循环作图
核心思想是 全程使用list
数据要整理为以下格式
> head(JG) itemID option correct 0.05 0.1 0.15 0.25 0.35 0.45 0.55 0.6 0.7 0.75 0.8 0.85 0.9 0.95 1 1 NR000527 A A 12.5 8.3 5.3 13 0 9.1 5.9 9.5 11.1 8.3 0 0 7.7 0 10 2 NR000527 B B 0 0 5.3 0 0 0 0 4.8 0 0 0 0 0 0 0 3 NR000527 C *C 6.2 8.3 10.5 0 11.5 0 23.5 4.8 0 25 20 0 0 20 0 4 NR000527 D D 81.2 83.3 78.9 87 84.6 86.4 64.7 81 88.9 66.7 80 100 92.3 80 90 5 NR000527 O O 0 0 0 0 3.8 4.5 5.9 0 0 0 0 0 0 0 0 6 NR000267 A A 0 16.7 36.8 17.4 7.7 18.2 11.8 14.3 11.1 16.7 0 9.1 7.7 0 0
然后使用将该data.frame按题目拆分
CF <- split(JG,JG$itemID) > CF $NR000154 itemID option correct 0.05 0.1 0.15 0.25 0.35 0.45 0.55 0.6 0.7 0.75 0.8 0.85 0.9 0.95 1 171 NR000154 A *A 18.8 0 15.8 4.3 19.2 18.2 5.9 52.4 55.6 75 40 72.7 53.8 60 60 172 NR000154 B B 12.5 16.7 10.5 13 11.5 18.2 5.9 19 11.1 0 0 9.1 7.7 10 0 173 NR000154 C C 12.5 16.7 15.8 17.4 11.5 18.2 47.1 19 22.2 25 40 9.1 23.1 20 30 174 NR000154 D D 18.8 16.7 5.3 26.1 23.1 31.8 23.5 4.8 11.1 0 20 9.1 15.4 10 10 175 NR000154 O O 37.5 50 52.6 39.1 34.6 13.6 17.6 4.8 0 0 0 0 0 0 0 $NR000169 itemID option correct 0.05 0.1 0.15 0.25 0.35 0.45 0.55 0.6 0.7 0.75 0.8 0.85 0.9 0.95 1 176 NR000169 A A 6.2 8.3 0 21.7 11.5 13.6 11.8 19 22.2 33.3 20 0 7.7 30 10 177 NR000169 B *B 18.8 8.3 15.8 17.4 15.4 22.7 41.2 19 22.2 41.7 40 72.7 46.2 30 60 178 NR000169 C C 12.5 25 10.5 8.7 11.5 18.2 17.6 42.9 33.3 8.3 40 0 0 20 10 179 NR000169 D D 18.8 16.7 26.3 13 26.9 31.8 11.8 14.3 22.2 16.7 0 27.3 46.2 20 20 180 NR000169 O O 43.8 41.7 47.4 39.1 34.6 13.6 17.6 4.8 0 0 0 0 0 0 0 $NR000200 itemID option correct 0.05 0.1 0.15 0.25 0.35 0.45 0.55 0.6 0.7 0.75 0.8 0.85 0.9 0.95 1 66 NR000200 A A 0 0 0 4.3 3.8 0 0 0 0 8.3 0 0 0 0 0 67 NR000200 B B 25 8.3 15.8 13 11.5 0 5.9 4.8 0 8.3 0 0 0 10 0 68 NR000200 C *C 62.5 91.7 78.9 73.9 80.8 95.5 94.1 90.5 100 66.7 100 100 92.3 90 100 69 NR000200 D D 12.5 0 5.3 8.7 3.8 4.5 0 4.8 0 16.7 0 0 7.7 0 0 70 NR000200 O O 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
继续按列表 进行转换数据 使用lapply函数
CFF <- lapply(CF,function(X) gather(X,group,value,-c(option,correct,itemID))) >CFF $NR000883 itemID option correct group value 1 NR000883 A A 0.05 6.2 2 NR000883 B B 0.05 0 3 NR000883 C *C 0.05 0 4 NR000883 D D 0.05 0 5 NR000883 O O 0.05 93.8 6 NR000883 A A 0.1 0 7 NR000883 B B 0.1 0 8 NR000883 C *C 0.1 0 9 NR000883 D D 0.1 8.3 10 NR000883 O O 0.1 91.7 11 NR000883 A A 0.15 5.3 12 NR000883 B B 0.15 5.3 13 NR000883 C *C 0.15 10.5 14 NR000883 D D 0.15 5.3 15 NR000883 O O 0.15 73.7 16 NR000883 A A 0.25 0 17 NR000883 B B 0.25 8.7 18 NR000883 C *C 0.25 4.3 19 NR000883 D D 0.25 0 20 NR000883 O O 0.25 87 21 NR000883 A A 0.35 3.8 22 NR000883 B B 0.35 7.7 23 NR000883 C *C 0.35 0 24 NR000883 D D 0.35 7.7 25 NR000883 O O 0.35 80.8 26 NR000883 A A 0.45 4.5 27 NR000883 B B 0.45 4.5 28 NR000883 C *C 0.45 0 29 NR000883 D D 0.45 27.3 30 NR000883 O O 0.45 63.6 31 NR000883 A A 0.55 0 32 NR000883 B B 0.55 0 33 NR000883 C *C 0.55 5.9 34 NR000883 D D 0.55 5.9 35 NR000883 O O 0.55 88.2 36 NR000883 A A 0.6 9.5 37 NR000883 B B 0.6 4.8 38 NR000883 C *C 0.6 14.3 39 NR000883 D D 0.6 9.5 40 NR000883 O O 0.6 61.9 41 NR000883 A A 0.7 11.1 42 NR000883 B B 0.7 11.1 43 NR000883 C *C 0.7 22.2 44 NR000883 D D 0.7 11.1 45 NR000883 O O 0.7 44.4 46 NR000883 A A 0.75 8.3 47 NR000883 B B 0.75 8.3 48 NR000883 C *C 0.75 8.3 49 NR000883 D D 0.75 25 50 NR000883 O O 0.75 50 51 NR000883 A A 0.8 0 52 NR000883 B B 0.8 0 53 NR000883 C *C 0.8 40 54 NR000883 D D 0.8 20 55 NR000883 O O 0.8 40 56 NR000883 A A 0.85 9.1 57 NR000883 B B 0.85 27.3 58 NR000883 C *C 0.85 9.1 59 NR000883 D D 0.85 9.1 60 NR000883 O O 0.85 45.5 61 NR000883 A A 0.9 7.7 62 NR000883 B B 0.9 15.4 63 NR000883 C *C 0.9 15.4 64 NR000883 D D 0.9 7.7 65 NR000883 O O 0.9 53.8 66 NR000883 A A 0.95 10 67 NR000883 B B 0.95 30 68 NR000883 C *C 0.95 30 69 NR000883 D D 0.95 0 70 NR000883 O O 0.95 30 71 NR000883 A A 1 20 72 NR000883 B B 1 20 73 NR000883 C *C 1 20 74 NR000883 D D 1 20 75 NR000883 O O 1 20 $NR001196 itemID option correct group value 1 NR001196 A *A 0.05 6.2 2 NR001196 B B 0.05 6.2 3 NR001196 C C 0.05 50 4 NR001196 D D 0.05 18.8 5 NR001196 O O 0.05 18.8 6 NR001196 A *A 0.1 16.7 7 NR001196 B B 0.1 16.7 8 NR001196 C C 0.1 25 9 NR001196 D D 0.1 16.7 10 NR001196 O O 0.1 25 11 NR001196 A *A 0.15 15.8 12 NR001196 B B 0.15 15.8 13 NR001196 C C 0.15 42.1 14 NR001196 D D 0.15 15.8 15 NR001196 O O 0.15 10.5 16 NR001196 A *A 0.25 17.4 17 NR001196 B B 0.25 8.7 18 NR001196 C C 0.25 30.4 19 NR001196 D D 0.25 13 20 NR001196 O O 0.25 30.4 21 NR001196 A *A 0.35 11.5 22 NR001196 B B 0.35 7.7 23 NR001196 C C 0.35 42.3 24 NR001196 D D 0.35 15.4 25 NR001196 O O 0.35 23.1 26 NR001196 A *A 0.45 13.6 27 NR001196 B B 0.45 22.7 28 NR001196 C C 0.45 54.5 29 NR001196 D D 0.45 9.1 30 NR001196 O O 0.45 0 31 NR001196 A *A 0.55 11.8 32 NR001196 B B 0.55 11.8 33 NR001196 C C 0.55 41.2 34 NR001196 D D 0.55 23.5 35 NR001196 O O 0.55 11.8 36 NR001196 A *A 0.6 9.5 37 NR001196 B B 0.6 19 38 NR001196 C C 0.6 38.1 39 NR001196 D D 0.6 33.3 40 NR001196 O O 0.6 0 41 NR001196 A *A 0.7 11.1 42 NR001196 B B 0.7 11.1 43 NR001196 C C 0.7 44.4 44 NR001196 D D 0.7 33.3 45 NR001196 O O 0.7 0 46 NR001196 A *A 0.75 41.7 47 NR001196 B B 0.75 16.7 48 NR001196 C C 0.75 16.7 49 NR001196 D D 0.75 25 50 NR001196 O O 0.75 0 51 NR001196 A *A 0.8 40 52 NR001196 B B 0.8 0 53 NR001196 C C 0.8 0 54 NR001196 D D 0.8 40 55 NR001196 O O 0.8 20 56 NR001196 A *A 0.85 9.1 57 NR001196 B B 0.85 27.3 58 NR001196 C C 0.85 0 59 NR001196 D D 0.85 54.5 60 NR001196 O O 0.85 9.1 61 NR001196 A *A 0.9 53.8 62 NR001196 B B 0.9 7.7 63 NR001196 C C 0.9 15.4 64 NR001196 D D 0.9 7.7 65 NR001196 O O 0.9 15.4 66 NR001196 A *A 0.95 50 67 NR001196 B B 0.95 20 68 NR001196 C C 0.95 30 69 NR001196 D D 0.95 0 70 NR001196 O O 0.95 0 71 NR001196 A *A 1 50 72 NR001196 B B 1 10 73 NR001196 C C 1 20 74 NR001196 D D 1 10 75 NR001196 O O 1 10
对该列表进行作图,同样的继续使用lapply
p1 <- lapply(CFF,function(x) ggplot(x,aes(as.numeric(group),as.numeric(value), col= I("black"),linetype=correct))+#option or correct #geom_text(aes(label= option))+ geom_smooth(span=1,se=F)+ coord_cartesian(ylim = c(0,100)) + labs(title=factor(x$itemID),y='Smoothed % Chosing',x='Criterion Score')+ guides(colour= "none",linetype = guide_legend(title = 'choice'))+ #colour= "none", scale_linetype_manual(values=c("dotted","dashed","dotdash","longdash", "solid"))+ #scale_linetype_discrete(labels=factor(x$correct))+ geom_vline(xintercept = c(0.6,0.8,0.9),linetype="dotdash")+theme_bw())
此时,图已存入p1,调用gridExtra包进行循环输出为pdf格式。
ml <- marrangeGrob(p1, nrow=1, ncol=1) ## non-interactive use, multipage pdf ggsave("xxx.pdf", ml,width = 6, height = 6)