提问
提问
我要登录
|免费注册
点赞
收藏
wx-share
分享

只要 20 行 R 代码,小白也能搞定教科书式的海报配图

丁香园

678

每次参加学术会议,除了围观大牛讲座,小闺女最喜欢的项目就是逛吃看海报啦。

作为学术成果展示的一种重 (tōu) 要 (lǎn) 方式,一张高质量的学术海报不仅需要准确地传达研究内容,更要逻辑清晰简单粗暴 (啊不对划掉) 明了。这时,新颖有审美的海报配图,作为大部分海报的主体,就显得尤为重要了。

然而我们常常看到的画风是这样的:

还有这样的:



这霓虹灯似的闪耀配色让仙女看了想打人,直男看了想报警。

那教科书里的配图长什么样呢,小闺女随手操起手边的 Qualify 复习资料举个例子 (并不小心暴露了学科):


天呐,这不是今年最流行的不仅温暖也无限温柔的莫兰迪色系吗?!(没听过莫兰迪色系的落伍科研圈朋友请自行搜索)

其实把这样的配图用到自己的学术海报里并不难实现,下面我们就来教大摆脱辣眼睛的默认配色,用 R 轻松绘出教科书同款配图。

01 用 par() 函数设置图片基本参数

熟练使用 par() 函数是画一张精美图片的第一步,par() 函数的常用参数有:

mfrow 或 mfcol:设置一版图片的数量,比如一版六张图片排两行三列就是 mfrow=c(2,3)

bg:设置背景颜色,如果不设的话图片导出之后背景是透明的哦

tcl:设置刻度线的长度和方向,绝对值为长度,正负为方向,正的为刻度线在图片内,负的为刻度线在图片外

cex.axis:刻度数字的大小

cex.lab:坐标名称的大小

oma 或 omi:设置整个图片区域的边框宽度,格式为 c(下,左,上,右)

mar 或 mai:设置每张小图的边框宽度,同样格式为 c(下,左,上,右),如果发现导出的图片小图的坐标没有显示完全就把这个参数的左侧或下侧调宽就可以了

las:设置坐标数字的方向,默认值是 0,也就是数字和坐标轴平行,这样画出来的纵坐标数字是横着的,非常难看,只要设成 las=1 就可以解决

mpg:设置坐标名称、坐标轴数字、坐标轴线与图片的距离,格式为 c(坐标名称与图片距离,坐标轴数与图片距离,坐标轴线与图片距离)。比如当坐标轴数字位数比较多的时候,会和坐标轴名称重叠,这时只需将这个参数的第一个数字调大就可以啦

pty:设置小图的形状,「m」即小图在小图区域内占最大面积,「s」即不管图片什么尺寸小图都是标准的正方形,强迫症专用

usr:图片区域坐标。除了可以设定图片区域的坐标以外,还可以用来直接提取图片区域坐标,给图片加背景色时有用

还有很多其他有用的参数,参见 par() 函数的帮助

我这张图的 par() 是这样设置的:



02 给图片加背景和刻度线

(1)背景色:用刚才提到的 par() 函数里面的 usr 参数提取图片区域坐标,再用 rect() 函数画一个长方形当做背景,代码如下:


下面这个链接的 Rcolor.pdf 涵盖了大部分常用的颜色,把 col 参数后面替换为喜欢的颜色就可以了,上面的 cornsilk 比较接近教科书中最常用的淡黄色,其他常用的颜色还有淡绿、淡蓝、淡粉等等。

不饱和色度是莫兰迪色系的精髓。

http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

这个时候图长这样:


(2)刻度线:用 abline () 函数画直线,颜色设成白色,h 设水平刻度线的纵坐标,v 设垂直刻度线的横坐标,代码如下:



加了刻度线图长这样:


03 画图的主体部分

这一部分要根据图的形式来自己创作啦,有一些细节的建议

(1)点:R 的点默认为黑色,点比较密集的情况下,黑色点不好看,建议用灰色,或者红蓝绿等等不是很深的颜色,可以在上面的 Rcolor.pdf 挑选。

R 的点默认为空心,个人认为也不好看,可以用 pch 参数调成实心或其他形状。 所有可选的形状如下

(2)线:R 默认的线有点细,不是很明显,我习惯加粗,把 lwd 参数调大一点就可以了。



(3)文字:R 的 text() 函数中设定的坐标默认为文字中间点的位置,所以如果几行文字横坐标相同,那么就是中间对齐。

如果想调成左对齐或右对齐,就调整 pos 参数,如 pos=4 时,设定的坐标为文字左侧位置,这时如果有多行文字就是左对齐了。


(4)坐标轴:和边框一样,坐标轴也会被刻度线盖住,我一般在用 plot() 函数画图时先不画坐标轴,即设置参数 xaxt 和 yaxt 为 「n」,最后再用 axis() 函数画坐标轴。

有时候想让坐标轴显示的数字和默认值不同,或者想隔一两个刻度点显示一个数字,都可以用这个方法,单独画坐标轴。

(5)边框:之前加白色刻度线时会将边框盖住一部分,在画完图之后,用 box() 函数再加一次边框就可以了。


最终成品:


同样也可以用这个方法画教科书级柱状图,比如:


代码较长,为方便大家查看,我直接将代码整理成资料包的形式,供大家下载。在【生物学霸】对话框回复【代码】,即可直接下载。

以上就是用 20 行 R 代码绘出教科书同款配图的全部教程了,是不是很简单呢?

<link />
提问
扫一扫
丁香实验小程序二维码
实验小助手
丁香实验公众号二维码
关注公众号
反馈
TOP
打开小程序