R数据分析:结合APA格式作图大法讲讲ggplot2和ggsci,请收藏

x33g5p2x  于2022-07-11 转载在 其他  
字(4.6k)|赞(0)|评价(0)|浏览(416)

之前给大家写过一篇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原理的掌握的话估计看起来还是比较吃力,基本原理大家随意搜搜都能搜得到资源的。

感谢大家耐心看完,自己的文章都写的很细,重要代码都在原文中,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先记得收藏,再点赞分享。

也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,有疑问欢迎私信,有合作意向请直接滴滴我。

相关文章