简介
最近有读者问:为什么类似的代码,别人能画的简洁明了,上档次。使用 ggplot 绘制有什么套路吗?
这是一个很不错的问题,市面很多书籍或者推文都是从某个图形出发,直接给出所有代码,读者只要学会复制粘贴即可使用。但是了解绘图套路所在,才是关键!
根据这个动机,小编总结个人经验并学习他人技巧,在五一期间写了这篇推文,供大家参考!
本文框架
- 简介
- 数据介绍
- 基础图形
- 细节调整方案
- 调整线宽度
- 调整 x 轴尺度
- 调整坐标轴标签并添加标题
- 调整颜色配色
- 修改主题
- 添加其他几何对象
- 小编有话说
数据介绍
这里以 ggplot2 绘制的折线图为例,从最基础的图形到添加细节内容。主要参考书籍《THE HITCHHIKER’S GUIDE TO GGPLOT2[1]》并结合小编个人科研经验。
数据来源于上述书籍,具体数据如下所示:
library(ggplot2) library(ggthemes) library(dplyr) library(readr) chilean.exports = "year,product,export,percentage 2006,copper,4335009500,81 2006,others,1016726518,19 2007,copper,9005361914,86 2007,others,1523085299,14 2008,copper,6907056354,80 2008,others,1762684216,20 2009,copper,10529811075,81 2009,others,2464094241,19 2010,copper,14828284450,85 2010,others,2543015596,15 2011,copper,15291679086,82 2011,others,3447972354,18 2012,copper,14630686732,80 2012,others,3583968218,20 2013,copper,15244038840,79 2013,others,4051281128,21 2014,copper,14703374241,78 2014,others,4251484600,22 2015,copper,13155922363,78 2015,others,3667286912,22 " charts.data = read_csv(chilean.exports)
基础图形
首先根据读者目的,将数据转化成所需形式。之后,确定好 x,y 轴的变量和几何对象(geom_line()
,geom_point()
等)。等绘制出基础图形后,再在此基础上添加细节修改。
p1 = ggplot(aes(y = export, x = year, colour = product), data = charts.data) + geom_line() p1
细节调整方案
下面给出几种细节修改的方案:
调整线宽度
在 geom_line()
中加入 linewidth = 1.5
来调整线宽。
p1 = ggplot(aes(y = export, x = year, colour = product), data = charts.data) + geom_line(linewidth = 1.5) p1
调整 x 轴尺度
由于 x 轴为年份,原图基础上通过修改 scale_x_continuous()
中的 breaks = seq(2006,2015,1)
调整 x 轴尺度。
p1 = p1 + scale_x_continuous(breaks = seq(2006,2015,1)) p1
调整坐标轴标签并添加标题
使用 labs()
添加标题(title
),坐标轴标签(x = "Year", y = "USD million"
)。
标题的添加不一定适用于科研论文发表,因为会在 LaTeX 或者 Word 中单独添加。这里仅供参考。
p1 = p1 + labs(title = "Composition of Exports to China ($)", subtitle = "Source: The Observatory of Economic Complexity") + labs(x = "Year", y = "USD million") p1
调整颜色配色
前面的图形是基于 ggplot[2] 默认配色绘制的,如果你想使得图形更加上档次,可以使用其他配色方案。可以使用其他 R 包提供的配色方案,例如:ggsci[3],viridis[4]等。当然也可以使用 scale_colour_manual()
手动添加颜色。
注意:配色方案的选择,小编写了好多相关推文:grafify包|一键搞定统计绘图!,paletteer包:拥有2100多个调色板!,推荐几个R数据可视化用的配色网站,我把莫奈的配色用到了科研绘图中。都可以拿来使用的~
# 方案一:手动添加颜色 colour = c("#5F9EA0", "#E1B378") p1 = p1 + scale_colour_manual(values = colour) p1
# 方案二:使用viridis添加颜色 library(viridis) p1 = p1 + scale_color_viridis(discrete=T) p1
修改主题
修改主题也是提高图形档次的重要环节,可以使用 ggplot 中自带的主题,例如:theme_bw(),theme_classic()
等,也可以使用其他 R 包的主题,例如:ggsci[5],ggthemes[6] 等。
主题修改相关推文,小编写了一些,可供参考:ggThemeAssist包:交互式修改图形主题,R可视乎|ggplot常用主题风格汇总。
# 方案一:theme_bw() p1 + theme_bw() + theme(panel.grid = element_blank(), legend.position = "bottom", legend.direction = "horizontal")
# 方案二:ggthemes包 library(ggthemes) p1 + theme_economist() + scale_colour_economist() + theme(panel.grid = element_blank(), legend.position = "bottom", legend.direction = "horizontal")
添加其他几何对象
p1 + geom_point(size = 3) + theme_economist() + scale_colour_economist() + theme(panel.grid = element_blank(), legend.position = "bottom", legend.direction = "horizontal")
小编有话说
- 本文主要以简单的折线图为例,介绍图形从“丑陋”到“美观”的变化技巧。当然还可以通过修改字体,添加更多几何对象等出发。但是对于科研论文而言,看上去可能比较多余。
- 主题内的设置有很多技巧,这篇推文没有做过多介绍。以后在慢慢总结吧。
- 绘制完一幅图后,可能需要将不同图形合并到一幅大图中,此时需要借助 cowplot[7] 包或 patchwork[8] 等包实现。
注意:合并图形相关 R 包介绍可见:用R来拼图和排版,告别AI和PS(二),用R来拼图和排版,告别AI和PS,合并多幅图形。
参考资料
[1]
THE HITCHHIKER’S GUIDE TO GGPLOT2: https://leanpub.com/ggplot-guide
[2]
ggplot: https://ggplot2.tidyverse.org/reference/ggplot.html
[3]
ggsci: https://github.com/nanxstats/ggsci
[4]
viridis: https://github.com/sjmgarnier/viridis
[5]
ggsci: https://github.com/nanxstats/ggsci
[6]
ggthemes: https://github.com/jrnold/ggthemes
[7]
cowplot: https://github.com/wilkelab/cowplot
[8]
patchwork: https://github.com/thomasp85/patchwork