R语言中分面是一个很好用的功能,尤其是在处理多组数据时。可以很好地将图分割成多个分面,展现数据的子集特征。
比如说:
ggplot(mpg, aes(x=displ, y=cty)) + geom_point()
以上可以获得一个散点图,但如果想看每一个变量特征下,另两个变量之间的相互关系,就可以使用分面。这里要用到的函数 facet_wrap。
ggplot(mpg, aes(x=displ, y=cty)) + geom_point() + facet_wrap(~class)
每一行每一列分别有多少个图,可以进行指定,比如 nrow=2。
ggplot(mpg, aes(x=displ, y=cty)) + geom_point() + facet_wrap(~class, nrow=2)
以上不是我这里想要说的,通过查询 facet_wrap 可以很简单地了解该函数的常见用法。
很多时候,我们会想在图中添加注释,比如加一个箭头、文字、公式、阴影等,这个通过简单查询也是可以实现的。
我一开始查到的是 annotate 函数,可以指定文字、阴影、线段或箭头等;
annotate('text', x=1.2, y=7.5, label=expression(-log[10]*'(p value)'), size=8, color='red')
annotate("rect", xmin=15, xmax=20, ymin=-Inf, ymax=Inf, alpha=0.3, fill="blue")
annotate("segment", x=2.064, xend=2.064, y=0.25, yend=0.1, size=1.2, colour="blue", face="bold", arrow=arrow(length=unit(0.3, "cm")))
以上提供了三种不同的注释类型,可以指定位置、颜色、透明度等等信息,感兴趣可以进一步查询,这里简单举个例子;
ggplot(mpg, aes(x=displ, y=cty)) + geom_point() + facet_wrap(~class, nrow=2) + annotate("segment", x=2.064, xend=2.064, y=5, yend=0.1, size=1.2, colour="blue", face="bold", arrow=arrow(length=unit(0.3, "cm")))
但令笔者苦恼的是,如果想要在不同分面上添加不同注释,不知道如何完成,因为这个原因,一开始总会放弃掉使用分面,但不使用分面很多时候各个图无法完全对齐,而且需要做多个图,有点麻烦!
后面忘了在哪看到了一种方法,尝试可行。特记录一下,如果能帮到人也是好的,哈哈哈哈。
annotate 对应的每一种注释类型还有另一种方法可以添加,就是使用 geom_text、geom_segment 等函数进行替代,而在后者中,就可以使用一个 data.frame 指定每一个分面上注释的位置和内容信息。这个举个例子:
ggplot(mpg, aes(x=displ, y=cty)) + geom_point() + facet_wrap(~class, nrow=2) + geom_segment(aes(x=a, y=b, xend=c, yend=d), size=1.2, colour="blue", arrow=arrow(length=unit(0.3, "cm")), data = data.frame(class=c("2seater", "compact", "midsize", "minivan" , "pickup", "subcompact", "suv"), a=c(2, 2, 4, 6, 5, 6, 5), b=c(14, 5, 26, 2, 14, 4,10), c=c(4, 5, 6, 2, 4, 4, 5), d=c(12, 14, 5, 6, 12, 7, 9)))
如果是其它类型的注释,应该也是相同思路,我这就没有进一步尝试了。就是,如果觉得有用的话,登录一下账号点个赞支持一下,欢迎评论交流!
网友评论