我有测试成绩数据。我想在不同年份(3行)的阅读中获得3个不同考试成绩的ggline图。我想在相同的年份(4行)写下4个不同的考试成绩。在一个地块上拥有所有7个令人困惑的阅读。 我可以对数据进行子集化,使其显示读取或写入,但我似乎无法将它们整齐地叠加在一起。
年,身份证,考试,分数,类型
2010,1,R1,72.75,R
2010,1,R2,68.25,R
2010,1,R3,83.75,R
2010,1,W1,89.25,W
2010,1,W2,58.25,W
2010年,1,W3,64.25,W
2010,1,W4,90.25,W
2011年,1,R1,52.25,R
2011年,1,R2,90.25,R
2011,1,R3,73.25,R
2011年,1,W1,79.5,W
2011年,1,W2,89.25,W
2011年,1,W3,85.25,W
2011年,1,W4,78.25,W
...
我有这个代码来生成一个只读的图:
ggplot(subset(df,skill %in% c("R1", "R2", "R3"))) +
geom_line(aes(year, score, group=skill, colour=skill))
我试图这样做以获得两者,但显然是不正确的:
p1 <- subset(df,skill %in% c("R1", "R2", "R3"))
p2 <- subset(df,skill %in% c("W1", "W2", "W3", "W4"))
ggplot()+ geom_line(data=p1, aes(year, score, group=skill, colour=skill)) +
geom_line(data=p2, aes(year, score, group=skill, colour=skill)) +
facet_grid(~type)
非常感谢任何帮助
答案 0 :(得分:1)
如果您要根据类型进行构面,则无需将数据子集化为p1和p2。
ggplot(df) +
geom_line(aes(year, score, group = skill, colour = skill)) +
facet_wrap(~type)
替代方案,添加nrow =2
来叠加图和scales = "free"
以给它们提供独立的轴。
ggplot(df) +
geom_line(aes(year, score, group = skill, colour = skill)) +
facet_wrap(~type, nrow = 2, scales = "free")
但是,您的评论说
这确实有效,但它将图形并排放置而不是垂直堆叠。有没有办法将它们叠加在另一个上面并且可能将图例分开,因此读写是分开的?
要解决单独的图例,我会制作每个图,然后使用包cowplot
进行组合。使用gridExtra
但cowplot
执行此操作的其他方法使这一点变得简单。
p1 <- ggplot(subset(df,skill %in% c("R1", "R2", "R3"))) +
geom_line(aes(year, score, group = skill, colour = skill)) +
facet_wrap(~type, scales = "free")
p2 <- ggplot(subset(df,type %in% c("W"))) +
geom_line(aes(year, score, group = skill, colour = skill)) +
facet_wrap(~type, scales = "free")
cowplot::plot_grid(p1, p2, nrow = 2)