眼见为实,如果想要快速了解一个文章的结构和结果,图表承担着不可或缺的地位。数据的可视化也贯穿在数据分析的始终,从原始数据到结果展示。比如,近期我们分享了很多方法有关的帖子,从元分析探讨,爬虫到网络分析,交互作用总览,这些文章中都涉及到图表的报告。而在R里最常用的画图工具包是:base graphics + ggplot2。
1 图的结构(基础的构建)
ggplot2的建构就像俄罗斯套娃,一环套一环。首先构建基础数据集ggplot(),设置对应的美学映射(aesthetic),将不同的几何对象(geometry)以图层(layer)的方式来粘合构图的。基本操作对于熟悉R的朋友们,一定不陌生;当然刚入门的朋友们也可以在网上找到很多详尽的介绍,文末我们会添加笔者搜罗到的有趣而又有用的帖子(ref 1)。
2 图片设置
2.1 添加参考线
画好了基础图,有时候是不是还想来点辅助线,让结果更直观,比如我们想看1000次抛硬币,正面朝上的概率是不是接近与0.5 (好像有研究发现并不是?)。当可视化原始数据时,我们需要加一个楚河汉界(chance level: y= 0.5 或者x = 0.5)来让原始数据更直观。
对于横线或竖线,分别使用geom_hline(yintercept = )和geom_vline(xintercept = )函数即可。
如果坐标轴是离散型,不能以字符串形式指截距,需要使用which(levels(...))来指定。
2.2 添加线段和箭头 annotate(“segment”)
如果添加了arrow参数,需要提前加载library(grid)包才能调用arrow( )函数;详情可在R 的console 中输入??grid::arrow 进行查看。示例代码如下(这里的df是ToothGrowth数据):
当然,annotate ( )函数还有很多有趣的设定,如添加文本,添加阴影区域,具体参数可以参考帮助文件,或文末的示例代码资源 (ref 2)。
2.3 坐标轴设定断层
比如在实验室研究中,我们要比较实验组和控制组反应时(Reaction time, RTs)是否有变化,进行预删选之后,有效的数据RTs >0 。当然我们可以通过坐标轴有关的函数规定标签范围(如ylim(200, 600))。
但是呢,总有一些人,想要让你在加点小提示,比如给坐标轴加个断层(图中的//),如图1所示:
图1
目前笔者只知道axis.breaks( ) [plotrix]可以实现此要求。
但是缺点是该函数不和ggplot2兼容!!!
虽然还有些人觉得坐标轴断层是没有意义的,不过既然存在这种需求,对应的还得解决。笔者只想到的是结合annotate(“segment”,…, arrow = arrow( ))的两次设定可以创造两个小斜杠,但是局限是后期叠加主题设定时,会抹平该变化。在此,诚挚的邀请并欢迎大家分享自己的解决策略!
3 主题设置
人靠衣装,马靠鞍!好的图表,不仅赏心悦目,给文章加分,更重要的是一目了然,是初读者也能对文章的结构形成粗略的了解。构建好看的图,主题选择很重要。
首先,主题函数theme( ) 常见的几种参数主要有以下几种:
- element_text ( ):可以设定文本有关的内容,包括,标题(title),次级标题(subtitle),图片说明(captions)等等;
- element_line ( ):可以调整坐标轴axis lines;
- element_rect ( ):设置矩形区域有关内容;
- element_blank ( ):关闭主题参数的设置;
其次,我们需要熟悉一下主题中常用的主题元素,详见下图(摘自知乎专栏ref 3)
最后,我们开始定制自己需要的主题。根据上图选择你想叠加到图片上的自制主题,比如这里,我们设定的主题如图:
随后,借助开放数据(ToothGrowth),图2是箱图的直接结果,图3是叠加了我们的定制主题,是不是整体来看图片更清晰了!
图2
图3
除了定制自己偏好的主题,这里要推荐一下theme_apa( ) [papaja package]。所以如果出现了选择性障碍,直接在画好的图层最后叠加(+ theme_apa( )),产出结果也很可人呢。值得一提的是,我们的定制主题与theme_apa( )一点也不冲突,所以两者可以结合一起用。因为直接设定theme_apa( )的话,有些小细节还是会忽略的,如文本的加粗。
4 一面多图
有效的办法之一是使用函数grid.arrange( ) [gridExtra 包]来设定,其逻辑和函数par(mfrow = c(row,col))效果近似。示例代码如下:
5 图片+文字动态化
关于动态图片的制作,此前本公众号推送的使用R画图文章中介绍了plotly这个包。本次笔者将介绍另一个强大的制作动态图片的包: Rchart。
同此前介绍的plotly 相比,Rchart 不能够叠加在ggplot2的图片对象之后直接使用,不过它的优势在于有简洁的绘图语句,并且也能够像ggplot2一样实现图片的定制化,例如使用R自带的mpg数据集画散点图。
有兴趣的朋友可以进一步探索Rchart的用法。
6 一步输出高质量的可发表级别图片的工具ggpubr
毫无疑问,ggpubr是一款画图神器,它的优势主要在于使用较短的代码就能画出可发表级别的图片,此外,它还支持添加显著性符号(*)。具体示例代码如下
注:图中星号代表OJ组和VC组内部比较的显著性 ****: p<0.001
7 一步输出APA格式表格的神器apaTables
笔者前两天无聊闲逛的时候偶然发现了这个包,当时就惊为天人。可以摆脱R-markdown的束缚,一键输出APA 表格,而且还支持给表格编号(如表格1,表格2),且能直接输出到word文档进行后续修改。最关键的是不用学R-markdown !一行命令搞定,可以省不少时间。
目前这个包支持回归模型(如下代码),相关分析和方差分析模型
稍微有点遗憾的是,回归模型只支持最基本的lm对象,而且方差分析模型不支持afex包的输出结果。另外,每次运行命令需要重新新建一个word文档,不能把新建的表格整合到已创建的doc文档中。不过瑕不掩瑜,目测这个包依然会有很多朋友会喜欢,毕竟不用手把手调表格了!
8 Reference
本文作者: 孙 丹 覃恺洋
图文排版:陈 阳
热门推荐:
元分析所用R全部代码及详细解释
常用R作图代码示例
使用R语言制作幻灯片
...
更多热门文章等你来发现
让世界听到我们的声音
让行路的你我不再孤独
让后来者不再无迹可寻
一个华人心理&管理学研究者的聚集地