R数据分析:结合APA格式作图大法讲讲ggplot2和ggsci,请收藏
之前给大家写过一篇plot的基础操作,相信同学们应该没有看过瘾。不过主流的用的多的还是ggplot2,所以今天打算结合一个形成APA样板格式图片的实例写写ggplot2的操作和图的配色。
关于APA格式
大家可以去到美国心理学会的官网,就可以看到APA格式的详细介绍了:
包括论文模板、引注规则等等,内容可以说很丰富了,对于社科类学生,不会写论文的,这个网站就是金标准啦,强烈推荐下。
不过我们今天关注的是里面的figure的标准,点开主页的Tables and Figures我们进入到下一个界面:
里面有表格模板,和figure模板,像表格模板里面,回归分析如何做表,因子分析如何做表等等的,人家都给了标准模板,这些不就是好多同学想要的吗,好多同学跑来咨询的吗?一股脑人家美国心理学会全给大家整理好了,推荐一波。具体到figure模板,里面有这么多:
像样本纳入排除的流程图怎么做,路径分析的图怎么做,质性研究,混合设计研究的图等等应有尽有无所不有,只能说---真好!
那么本文希望将下面的这一幅APA官网上的示例柱状图用ggplot2做出来,并在做过程中结合着给大家写写ggplot2的常见操作(ggplot2的作图原理我看网上已经有很多了,大家可以自行去搜索学习,本文略过)
实例操练
我的画图示例数据如下:
可以看到数据中有我们画柱状图需要的score和误差线需要的upper和lower的值,和分组变量reward。
第一步我们将映射关系处理好:
viz_data_one %>%
ggplot(aes(x = age_group,
y = framing_score,
fill = reward,
ymin = lower,
ymax = upper))
形成下图,在上面的代码中我只是告诉ggplot,我的xy轴分别是那两个变量,用什么变量去映射到填充色,同时上下限分别是多少,仅此而已,我并没有告诉它应该用什么geom去代表我的数据,所以ggplot不知道,它也不会给你展示任何的geometry,所以代码运行后输出除了映射的xy轴,就没了,如下:
在上面的代码继续往下写,我知道我需要一个柱状图,所以geometry应该是geom_bar,同时我要用来画柱子的变量-score就代表柱子的高度,不需要进行统计转换,所以写参数stat = 'identity';我需要3组柱子并排排列,同时设定柱子之间的宽度(position_dodge(.6))和柱子的宽度(width),到此时写出代码如下:
geom_bar(stat = 'identity',color='black',position = position_dodge(.6),width = .5)
上面代码中的position_dodge就是要求柱子并列排列,里面的第一个参数就是并列的宽度,width = .5设定的是柱子的宽度,运行代码后效果如下:
感觉还不错哦。
下一步我们需要将误差条加上,这又是另一个geom了,此时我们继续加一个geometry,叫做geom_errorbar,同样的我们的误差条和柱子一样需要并列排列,同时我们的误差棒的宽度也得减少,于是我们设定width = .1,同时position = position_dodge(.6),写出代码如下:
geom_errorbar(width = .1, position = position_dodge(.6))
运行后输出如下:
到现在图中有两个geom,一个bar,一个是errorbar,我们的数据信息已经全部通过geometry展示出来了。
接下来修饰细节,首先是改变颜色,我们需要指定一下映射的颜色,具体来讲我们是改变fill的填充色,所以需要用到scale_fill_manual函数。
那么颜色怎么样去选呢?或者怎么快速找到你心仪的颜色呢?
首先安装colourpicker包,然后你的Rstudio就会出现颜色选择的插件了Plot Color Helper,有了它你就可以非常方便地选出来你想要的颜色并得到颜色的表示方法:
点击Plot Colour Helper得到如下图(我只截了一张,你可以选各种颜色的):
通过这么一下,我就选了下面3个颜色,并且写出如下代码:
scale_fill_manual(values = c("#FAFAFA", "#FFA500", "#6CA6CD"))
此时再运行输出结果如下:
接下来我们要处理一些图中的非数据元素(non-data elements),比如背景,比如各种标签,首先我们改xy轴的标签和图例的title,需要用到labs函数,写出代码如下:
labs( x = "Age Group",y = "Framing Score",fill = NULL,title = "Low Risk")
上面的代码,x = "Age Group",y = "Framing Score"这都很简单,因为我们的图例是针对fill的,那么此时fill在labs中就是图例的title,上面的代码将图例的title拿掉了,同时加上了整个图的title。
还有我们需要将xy轴的结合位点设置为0,这个操作是针对y轴的,需要用到scale_y_continuous,代码如下:
scale_y_continuous(expand = expansion(0), limits = c(0, 0.4), breaks = seq(0, .4, .1))
上面的代码中expand是控制y轴的上下限的伸展程度的,expansion(0)就意味着y轴不做任何拓展,limits设定y轴的界限(其实是数据量的界限),breaks设定y轴上的ticks。
运行后得到下图:
到这儿还有很多的非数据元素需要改动,需要用到theme函数,原图的背景版是白的,我们需要panel.background参数来设置背景版,同时我希望整幅图的title居中加粗,plot.title可以实现我的需求,同理我们需要修正坐标轴得用到axis.line,axis.title和axis.text,需要修改坐标轴上的小标可以用axis.ticks等等;
上面提到的这些都叫做非数据绘图元素,对于每一种元素都有对应的元素函数,比如element_line(改变相应元素的线条类型),element_text(改变相应元素的文本,包括大小,粗细...)等等:
Each element is associated with an element function, which describes the visual properties of the element. For example, element_text() sets the font size, colour and face of text elements like plot.title.
限于本文的篇幅,也没法给大家介绍的很详细,大家可以搜搜这本书《ggplot2: Elegant Graphics for Data Analysis》,网上都有免费的,感兴趣的同学可以去阅读学习,到这儿,我们的代码写出如下:
theme(
plot.margin = unit(c(1, 1, 1, 1), "cm"),
panel.background = element_blank(),
plot.title = element_text(size = 22, face = "bold",
hjust = 0.5,
margin = margin(b = 15)),
axis.line = element_line(color = "black"),
axis.title = element_text(size = 22, color = "black",
face = "bold"),
axis.text = element_text(size = 22, color = "black"),
axis.text.x = element_text(margin = margin(t = 10)),
axis.text.y = element_text(size = 17),
axis.title.y = element_text(margin = margin(r = 10)),
axis.ticks.x = element_blank(),
legend.position = c(0.20, 0.8),
legend.background = element_rect(color = "black"),
legend.text = element_text(size = 15),
legend.margin = margin(t = 5, l = 5, r = 5, b = 5),
legend.key = element_rect(color = NA, fill = NA)
)
到此,运行上面的代码后得到下图:
基本上和APA官网上的示例格式一样了,示例完成!
ggsci的使用
接下来介绍ggsci,这是一个比较高级的杂志配色板:
ggsci offers a collection of high-quality color palettes inspired by colors used in scientific journals, data visualization libraries, science fiction movies, and TV shows.
这么说吧,你图画好了,像按照杂志配色,就使用这个包就行,十分简单好用,这个包提供包括自然出版集团Nature Publishing Group,美国科学促进会American Association for the Advancement of Science,新英格兰杂志The New England Journal of Medicine,还有jama,Lancet等等顶级期刊配色,所以想要成为大佬,得抓紧学会使用ggsci了。
用起来也很简单,做好图之后直接改动相应的scale就行,比如我刚刚做的图是用scale_fill_manual来定义颜色的,我直接将这行代码改为scale_fill_aaas,我就可以得到Science杂志的配色如下:
Science配色
改为scale_fill_npg,我便可以得到nature杂志的配色:
nature杂志配色
改为scale_fill_nejm,我便可以得到新英格兰医学杂志的配色:
NEJM配色
不得不说高端杂志的调色盘,还是挺好看的。
有没有一种看了上面的内容感觉发Science有望的感觉,如果有,请收藏本文并转发扩散,谢谢大家啦,如果还没有也请收藏本文,说不定下次再回看就有了,哈哈哈哈。
祝福大家早日成为大佬。
小结
今天结合一个画图示例,给大家整理了些许的ggplot2作图思路和配色的操作,如果每有ggplot原理的掌握的话估计看起来还是比较吃力,基本原理大家随意搜搜都能搜得到资源的。
感谢大家耐心看完,自己的文章都写的很细,重要代码都在原文中,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先记得收藏,再点赞分享。
也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,有疑问欢迎私信,有合作意向请直接滴滴我。
R数据分析:结合APA格式作图大法讲讲ggplot2和ggsci,请收藏的更多相关文章
- R数据分析:潜类别轨迹模型LCTM的做法,实例解析
最近看了好多潜类别轨迹latent class trajectory models的文章,发现这个方法和我之前常用的横断面数据的潜类别和潜剖面分析完全不是一个东西,做纵向轨迹的正宗流派还是这个方法,当 ...
- R语言自动化报告格式——knitr
R语言自动化报告格式--knitr 相关文献: R语言自动化报告格式--knitr 资讯 | R Notebooks 即将发布 ------------------------------------ ...
- 如何写APA格式的论文
一.一般准则 FONT : TIMES NEW ROMAN SIZE : 12 DOUBLE-SPACING INDENT : ...
- R语言基础画图/绘图/作图
R语言基础画图/绘图/作图 R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介 ...
- R数据分析:跟随top期刊手把手教你做一个临床预测模型
临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域顶级期刊的文章,文章名在下面 Ballesta-Castillejos ...
- R数据分析:二分类因变量的混合效应,多水平logistics模型介绍
今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...
- R数据分析:如何简洁高效地展示统计结果
之前给大家写过一篇数据清洗的文章,解决的问题是你拿到原始数据后如何快速地对数据进行处理,处理到你基本上可以拿来分析的地步,其中介绍了如何选变量如何筛选个案,变量重新编码,如何去重,如何替换缺失值,如何 ...
- R数据分析:临床预测模型中校准曲线和DCA曲线的意义与做法
之前给大家写过一个临床预测模型:R数据分析:跟随top期刊手把手教你做一个临床预测模型,里面其实都是比较基础的模型判别能力discrimination的一些指标,那么今天就再进一步,给大家分享一些和临 ...
- Python 和 R 数据分析/挖掘工具互查
如果大家已经熟悉python和R的模块/包载入方式,那下面的表查找起来相对方便.python在下表中以模块.的方式引用,部分模块并非原生模块,请使用 pip install * 安装:同理,为了方便索 ...
- 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...
随机推荐
- Android Qcom USB Driver学习(十四)
UDC-Gadget UDC:(USB Device Controller)用于管理和控制USB设备与主机之间的通信. Gadget:Android在此层实现了adb,mtp(Media Transf ...
- slab分配器正式被弃用,slub成为分配器唯一选择
在使用slab分配器进行内存分配时,可能会出现以下缺点: 内存碎片化.由于slab分配器需要将内存分成大小相同的块,如果分配不均衡或者对象大小不同,就容易导致内存碎片化. 性能下降.Slab分配器将内 ...
- ArkTS 和仓颉的特性对比与案例
ArkTS和仓颉是两种不同的编程语言,它们各自具有独特的特性和设计目的. ArkTS特性 ArkTS是一种基于TypeScript的编程语言,专门为鸿蒙应用开发而设计.它保留了TypeScript的大 ...
- nextjs 类装饰器
// 类装饰器 == 本质就是一个函数 // 在某个类的上面使用 @ // 可以等价于函数调用 doc(Zlx) // 不会破坏原有的类 可以扩展类 // "experimentalDeco ...
- 更改后端的数据格式适配el-tree组织树
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 云原生爱好者周刊:KubeKey v2.1.0 alpha 版发布!
KubeKey v2.1.0-alpha.0 发布啦!该版本的主要特性: 支持三种使用场景的 Etcd 集群(二进制部署,Kubeadm 部署,连接外置已存在的 Etcd 集群). 支持部署 Cont ...
- 华为IPv6 GRE隧道
IPv6 over IPv4 GRE封装隧道 实验目标: 该实验参考了华为官网案例配置 https://support.huawei.com/enterprise/zh/doc/EDOC1000097 ...
- Qt Creator pro文件常见配置
HEADERS:指定项目的头文件(.h) SOURCES:指定项目的源文件(.cpp) FORMS:指定协议UIC处理的由Qt Designer生成的.ui文件 RESOURCES:指定需要rcc处理 ...
- 14-8 C++函数调用运算符
目录 14.8.0 引入 函数对象 含有状态的函数对象 函数对象常做泛型算法实参 14.8.1 lambda是函数对象 表示没有捕获值的lambda的类 表示lambda及其捕获行为的类 14.8.2 ...
- C++学习——类当中static关键字的作用
一.类和对象 我们知道类是"行为"和"属性"的集合,我们可以通过类来实例化对象,从而定义对象的"行为"和"属性".比如: ...