R语言有两大主要功能,绘图和统计,R的绘图功能是很强大的,在R里绘制好图形后常常需要输出图形。
图形常见的格式有位图和矢量图,位图又包括TIFF、BMP、JPEG、PNG等;矢量图包括PDF、VMF、SVG等。
今天就来学习R中怎么导出常见的位图和矢量图形。
1. 导出位图
保存图形时,将绘图代码放在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。
用法:
tiff("mygraph.tiff") # 开启目标图形设备 plot(mtcars$wt, mtcars$mpg) # 绘图代码 dev.off() # 关闭目标图形设备
除了tiff()
,还可以使用函数win.metafile()
/png()
/jpeg()
/bmp()
/pdf()
/xfig()
/postscript()
将图形保存为其他格式。
1.1 TIFF格式
论文投稿常用的位图格式为TIFF
格式,在保存图形时如果需要输出位图,建议保存为TIFF格式。
在使用tiff()函数时,可以调整函数中的参数来调整输出图形,比如设置宽度width、高度height、图片压缩类型compression等。
tiff(filename = "Rplot%03d.tif", width = 480, height = 480, units = "px", pointsize = 12, compression = c("none", "rle", "lzw", "jpeg", "zip", "lzw+p", "zip+p"), bg = "white", res = NA, family = "", restoreConsole = TRUE, type = c("windows", "cairo"), antialias) # 部分参数解释 filename # 要输出图形的文件名称 width = 480 # 设置输出图形的宽度 height = 480 # 设置输出图形的高度 units = "px" # 设置宽度和高度的单位,默认px(像素),其余有英寸in、厘米cm、毫米mm。 pointsize = 12 # 图形上文字的大小,默认为12 compression # 设置输出图形的压缩类型 # 可选择的压缩类型有"none", "rle", "lzw", "jpeg", "zip", "lzw+p", "zip+p" # tiff格式图形建议选择lzw压缩 bg = "white" # 设置图形背景色 res = NA # 设置导出图形的分辨率,默认72ppi。 family = "" # 设置图形上文字的字体
1.2 BMP格式
BMP格式没有采用文件压缩,图形占用空间比较大,一般不建议输出BMP格式。
bmp(filename = "Rplot%03d.bmp", width = 480, height = 480, units = "px", pointsize = 12, bg = "white", res = NA, family = "", restoreConsole = TRUE, type = c("windows", "cairo"), antialias) # 部分参数解释 # bmp()函数各参数解释和tiff()函数一致。 # 和tiff()的区别是没有compression参数,不需要设置图形压缩类型
1.3 JPEG格式
JPEG是生活中最常用的图片格式,只支持有损压缩,图片压缩率很高,文件比较小。
jpeg(filename = "Rplot%03d.jpg", width = 480, height = 480, units = "px", pointsize = 12, quality = 75, bg = "white", res = NA, family = "", restoreConsole = TRUE, type = c("windows", "cairo"), antialias) # 部分参数解释 quality # JPEG图片的质量,默认75,数值为0-100,值越小,图片压缩越大,图片质量越低 # jpeg()函数其余各参数解释和tiff()函数一致。 # 和tiff()的区别是没有compression参数,不需要设置图形压缩类型 # 但是多了quality参数,需要设置导出图片的质量
1.4 PNG格式
PNG格式图片采用无损压缩,压缩率高,文件尺寸较小。
png(filename = "Rplot%03d.png", width = 480, height = 480, units = "px", pointsize = 12, bg = "white", res = NA, family = "", restoreConsole = TRUE, type = c("windows", "cairo", "cairo-png"), antialias) # 部分参数解释 # bmp()函数各参数解释和tiff()函数一致。 # 和tiff()的区别是没有compression参数,不需要设置图形压缩类型
2. 导出矢量图
在R中绘制好图形后,我一般推荐将图形保存为PDF格式,可以方便后期修改,PDF既可以转换为EPS格式,也可以转换为TIFF格式,用来投稿很方便。
PDF格式转换为EPS和TIFF格式请参见《PPT导出高清分辨率图片的四种方法》这篇推文。
2.1 PDF格式
在R中有两种方法输出PDF文件。
一是跟前面一样,使用pdf()打开PDF图形设备,运行绘图代码,然后使用dev.off()关闭图形设备即可。
这种方法适用于R中的大多数图形,包括基础图形和基于网格的图形,如那些由ggplot2和lattice创建的图形。
pdf(file = if(onefile) "Rplots.pdf" else "Rplot%03d.pdf", width, height, onefile, family, title, fonts, version, paper, encoding, bg, fg, pointsize, pagecentre, colormodel, useDingbats, useKerning, fillOddEven, compress) # 部分参数解释 file # 要输出的图形的文件名称 width, height # 图形的宽度和高度(单位英寸),默认值为7英寸。 # 要以厘米为单位指定长宽,必须手动执行转换: # 输出8cm*8cm,则设置width=8/2.54,height=8/2.54 onefile # 默认为TRUE,允许一个文件包含多个图形。 # 如果为false,生成一个包含每个页面的页码的文件。 family # 图上使用的字体,默认为"Helvetica" bg, fg, # 初始背景色,默认为透明色;初始前景色,默认为黑色。 pointsize # 使用的字体大小,单位为磅,默认为12 pagecentre # 逻辑词,图形区域是否居中于输出页面,默认为TRUE colormodel # 指定颜色模式的字符串,可选有"srgb","gray"("grey")和"cmyk";默认"srgb"。
用法:
pdf("myplot.pdf", width=4, height=4) # 开启图形设备 plot(mtcars$wt, mtcars$mpg) # 绘图代码 dev.off() # 关闭图形设备
如果使用ggplot2绘制图形,还可以使用ggsave()
函数输出PDF格式图形。
ggsave(filename, plot = last_plot(), device = NULL, path = NULL, scale = 1, width = NA, height = NA, units = c("in", "cm", "mm"), dpi = 300, limitsize = TRUE, ...) # 部分参数解释 filename # 设置保存图片的文件名及格式,可选格式有ps、tex、jpeg、pdf、tiff、png、 # bmp、svg或wmf等。wmf文件仅限在装有Windows系统的计算机中保存。 plot # 默认保存最后创建的图片 path # 图片保存的位置,结合文件名来保存,默认保存在工作目录 width, height, units # 保存图片的宽度、高度和单位,默认单位为英寸。 dpi # 设置图片分辨率,接受字符串设置:"retina"(320), "print"(300)或"screen"(72) limitsize # 逻辑词,默认TRUE,表示ggsave不会保存大于50*50英寸的图片 compression = "lzw" # tiff格式压缩类型
用法:
# 加载数据 data("ToothGrowth") df <- ToothGrowth df$dose <- as.factor(df$dose) # 绘制图形 ggboxplot(df, x = "dose", y = "len", color = "dose", palette = "jco") # 输出图形 ggsave("myplot.pdf", width=8, height=8, units="cm")
2.2 SVG格式
SVG文件在创建和使用的方法上与PDF文件基本相同,可以使用svg()函数保存图形。
svg(filename = if(onefile) "Rplots.svg" else "Rplot%03d.svg", width = 7, height = 7, pointsize = 12, onefile = FALSE, family = "sans", bg = "white", antialias = c("default", "none", "gray", "subpixel")) # 部分参数解释 antialias # 字符串;要使用的抗锯齿状类型,默认为"default" # 其他参数和pdf()一样。
如果使用ggplot2绘制图形,也可以使用ggsave()函数保存图形。
2.3 WMF格式
WMF文件在创建和使用的方法上与PDF文件基本相同——但这种格式的图形文件只能在Windows上创建。
win.metafile(filename = "", width = 7, height = 7, pointsize = 12, family, restoreConsole = TRUE) # 参数解释和前面一样
Microsoft Word和PowerPoint对于PDF文件的导入支持较差,但是这些程序都是原生支持WMF格式的。WMF格式的一个缺点是不支持透明。