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)   

  

 

  

 

posted @ 2017-08-28 18:48  JoAnna_L  阅读(2010)  评论(0编辑  收藏  举报