竖线 绘图_科研绘图:好看的“皮囊”千篇一律

本文介绍了如何使用ggplot2在R中进行数据可视化,包括添加参考线、线段和箭头,坐标轴设定断层,主题设置,以及制作多图和动态图片。通过示例代码展示了如何利用ggplot2的功能增强图表的直观性和美观性,并推荐了ggpubr和apaTables两个包,用于输出高质量的图表和APA格式表格。
摘要由CSDN通过智能技术生成

眼见为实,如果想要快速了解一个文章的结构和结果,图表承担着不可或缺的地位。数据的可视化也贯穿在数据分析的始终,从原始数据到结果展示。比如,近期我们分享了很多方法有关的帖子,从元分析探讨,爬虫到网络分析,交互作用总览,这些文章中都涉及到图表的报告。而在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数据):

57137ba97ddb062e04950e17fa8fed52.png

当然,annotate ( )函数还有很多有趣的设定,如添加文本,添加阴影区域,具体参数可以参考帮助文件,或文末的示例代码资源 (ref 2)。

2.3  坐标轴设定断层

比如在实验室研究中,我们要比较实验组和控制组反应时(Reaction time, RTs)是否有变化,进行预删选之后,有效的数据RTs >0 。当然我们可以通过坐标轴有关的函数规定标签范围(如ylim(200, 600))。

但是呢,总有一些人,想要让你在加点小提示,比如给坐标轴加个断层(图中的//),如图1所示:

bb6921bab77b92dc7d28c77ad2e46a6e.png

图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)

daa0f2c2850ef7651d029df123e376ef.png

最后,我们开始定制自己需要的主题。根据上图选择你想叠加到图片上的自制主题,比如这里,我们设定的主题如图:

cb1a56adab7d389c25927417dd01e558.png

随后,借助开放数据(ToothGrowth),图2是箱图的直接结果,图3是叠加了我们的定制主题,是不是整体来看图片更清晰了!

86aa1d2c5930f2a9ba72df4e37f66036.png

图2

16f4c7f4e94dcd6757ae9eaa53b6098c.png

图3

除了定制自己偏好的主题,这里要推荐一下theme_apa(  ) [papaja package]。所以如果出现了选择性障碍,直接在画好的图层最后叠加(+ theme_apa(  )),产出结果也很可人呢。值得一提的是,我们的定制主题与theme_apa(  )一点也不冲突,所以两者可以结合一起用。因为直接设定theme_apa(  )的话,有些小细节还是会忽略的,如文本的加粗。

4  一面多图

有效的办法之一是使用函数grid.arrange(  ) [gridExtra 包]来设定,其逻辑和函数par(mfrow = c(row,col))效果近似。示例代码如下:

386fa72af9af9a6d1792beae84699cd4.png

5  图片+文字动态化

关于动态图片的制作,此前本公众号推送的使用R画图文章中介绍了plotly这个包。本次笔者将介绍另一个强大的制作动态图片的包: Rchart。

同此前介绍的plotly 相比,Rchart 不能够叠加在ggplot2的图片对象之后直接使用,不过它的优势在于有简洁的绘图语句,并且也能够像ggplot2一样实现图片的定制化,例如使用R自带的mpg数据集画散点图。

b969111dc35841d8293f3962166f2736.png

fce76c927e39fe9e78f845d976326986.png

有兴趣的朋友可以进一步探索Rchart的用法。

6  一步输出高质量的可发表级别图片的工具ggpubr

毫无疑问,ggpubr是一款画图神器,它的优势主要在于使用较短的代码就能画出可发表级别的图片,此外,它还支持添加显著性符号(*)。具体示例代码如下

9ba0187f28f72f7f211ba0efe4bcc581.png

bde16632fa1f5d6c963a93ca8ffe365d.png

注:图中星号代表OJ组和VC组内部比较的显著性 ****: p<0.001

7  一步输出APA格式表格的神器apaTables

笔者前两天无聊闲逛的时候偶然发现了这个包,当时就惊为天人。可以摆脱R-markdown的束缚,一键输出APA 表格,而且还支持给表格编号(如表格1,表格2),且能直接输出到word文档进行后续修改。最关键的是不用学R-markdown !一行命令搞定,可以省不少时间。

目前这个包支持回归模型(如下代码),相关分析和方差分析模型

e61333ebc322aa8a9719991034096ae1.png

稍微有点遗憾的是,回归模型只支持最基本的lm对象,而且方差分析模型不支持afex包的输出结果。另外,每次运行命令需要重新新建一个word文档,不能把新建的表格整合到已创建的doc文档中。不过瑕不掩瑜,目测这个包依然会有很多朋友会喜欢,毕竟不用手把手调表格了!

8  Reference

25c445c5c0b63b7634c5f3e475d6416d.png

fb63fc7ed7b2909557c9e8c31e0714e9.png

本文作者: 孙  丹  覃恺洋

图文排版:陈  阳

ef2fda2b64b764b16f3fafb3310c4cb1.gif

热门推荐:

元分析所用R全部代码及详细解释

常用R作图代码示例

使用R语言制作幻灯片

...

更多热门文章等你来发现

253ce7382ef01270a9690915be062041.gif

让世界听到我们的声音

让行路的你我不再孤独

让后来者不再无迹可寻

一个华人心理&管理学研究者的聚集地

8c6528695593b918cb33a66824c7f576.png

7e073ef2a0cb7f2689be99b9f48fb068.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值