傻傻分不清楚的R绘图尺寸,一键答疑
annuogene
2018-04-19 14:33

遇到以下情景的请点赞:

情景一:当按期刊要求将图片调整到指定尺寸或像素时……图片严重变形;

情景二:图片只有放大至400%或缩小至20%才能看清楚……还能不能愉快的玩耍了;

情景三:用R画图时,总报边界太大的错误……可明明有时候表现挺好的。

为什么会出现上述问题?原来是这些概念没被分清楚~

矢量图vs位图

矢量图和位图是常见的两种图形,关于二者区别,小编为大家找了一个简单示例图,请自行查看。此外网上还有很多详细的讲解,相信聪明的你一看就会。

英寸 (inch)vs 像素(px,pixels)

像素和寸(在R里面用英寸)是常见的图片尺寸。英寸就是实际物理尺寸,一个像素其实就是一个颜色格子。要说二者关系还离不开分辨率dpi。

1英寸(in)=25.4毫米(mm)

dpi(Dots Per Inch)表示一英寸内像素点的个数,像素点越多,分辨率越高,dpi用于打印或印刷领域。当然它还有个同胞兄弟ppi(Pixel Per Inch),用于屏幕显示领域。例如照相机在拍照时的分辨率单位用ppi,在打印出照片时分辨率单位是dpi。当输出分辨率高于摄入分辨率时,照片则不清晰。一般期刊杂志只要求图片实际宽高、300dpi,并没有提到像素。其实是由英寸限制了。

英寸*dpi=像素

当在R里面用png默认参数生成图片(480*480)时,要保证300dpi的分辨率,需换成物理尺寸宽高均为1.6(480/300)inch。如果展示或打印的尺寸超过1.6inch,图片dpi将低于300dpi,导致图片不清晰。

1.为什么是300dpi?

人眼能分辨出的最大分辨率是300dpi。超过这个分辨率,人眼是无法看出差别的,也就是说300dpi和600dpi在人眼看来是没有差别的,所以现在的冲印设备最大的设计输出分辨率以及期刊要求,就是300dpi。

2.位图可以直接以英寸做单位吗?

位图函数可以选择单位,当设置成英寸时,还要设置分辨率才能保证图像清晰。如png(height =7,width = 7,units = "in",res=300)。

pt vs cex

各学术期刊一般对字号等均有要求,比如Nature系列,根据位置不同,字号不同,一般为5~8pt,线型为0.25~1pt。

pt(point),中文译为“磅”,是1/72英寸。px与pt不同,只有当图像分辨率为72dpi时px才是1/72英寸。所以期刊在要求6pt字号时,肯定会对图片大小也有限制(如Nature要求单列宽89mm,双列宽183mm,高247mm或120-136mm),否则会导致图太大字太小。

在AI,PS里面可以对矢量图修改pt值。那位图怎么办?当然生成时符合要求就行了。

R中字号大小调节参数是cex。在pdf()和png()生成画布时是由pt设置的,默认pointsize=12,表示12pt。画图参数par(ps=12)也可以调整字体大小。而真正绘图时cex表示缩放的倍数,默认等于1。即当cex=0.5时,字号大小则为6pt。期刊要求的线条(Nature要求0.25pt~1pt),可以通过lwd来设置,单位是pt。

mar vs mai

对于画图边界的设置par()里面有mar和mai两种参数。mai是以英寸为单位,mar是以行数为单位,行高是默认值。二者都是实际距离单位,不是相对值,差别在于单位长度不一样,画图时二者只能取其一。当用pdf()画图时,默认是7inch。如果为了显示legend,留白超过7inch,则会报错。所以绘图边界设定时要考虑大小。


总结

1、图片的大小在生成图片时是可以设置的,不需要手动转换;

2、图片尺寸和绘图元素尺寸是匹配的。以像素为单位作为尺寸时,在打印时要注意物理尺寸,否则会影响清晰度;

3、边界问题就不多说了,如果边界太大,那就调整画布大小。

最后提醒一句,不同期刊杂志的绘图尺寸大小要求不一样,一定要查看清楚呦~

文案:生物信息分析部 任雪

设计:胡珊珊