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)

浙公网安备 33010602011771号