R中输出常见位图和矢量图格式总结

简介: R语言有两大主要功能,绘图和统计,R的绘图功能是很强大的,在R里绘制好图形后常常需要输出图形。图形常见的格式有位图和矢量图,位图又包括TIFF、BMP、JPEG、PNG等;矢量图包括PDF、VMF、SVG等。今天就来学习R中怎么导出常见的位图和矢量图形。

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() # 关闭图形设备

IBC87VXUP$)_3NZJO30EV_R.png

如果使用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")

TF{Z])BX~R4]6RU@OE`II7I.png


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格式的一个缺点是不支持透明。

目录
相关文章
|
6月前
|
传感器 人工智能 自然语言处理
智能体来了+技术应用迎来爆发期,产业融合催生新机遇
随着AI技术发展,智能体作为连接大模型与实际应用的关键,正推动各行业数字化转型。其具备感知、决策与执行能力,广泛应用于金融、客服、制造等领域,提升效率与服务品质。企业加速布局,人才需求激增,“智能体来了”等平台提供从理论到实战的系统化培养路径,助力个人职业发展与企业智能化升级。未来,智能体将成为技术融合与产业变革的核心驱动力。(237字)
176 10
|
7月前
|
机器学习/深度学习 存储 人工智能
AWQ: 面向设备端大语言模型压缩与加速的激活感知权重量化——论文阅读
AWQ是一种面向设备端大语言模型(LLM)压缩与加速的激活感知权重量化方法。与传统基于权重大小的量化策略不同,AWQ通过分析输入激活分布识别关键权重通道,并采用按通道缩放策略,在保持硬件效率的同时显著提升量化精度。实验表明,AWQ在多种LLM上实现了接近无损的低比特量化(如INT4),并在边缘设备上实现高达3倍以上的推理加速,为大模型的设备端部署提供了高效解决方案。
803 1
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
669 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
数据可视化
R语言多图合成:优雅地在一个画布上展示多个图形
【8月更文挑战第30天】R语言提供了多种方法来实现多图合成,从基础的`par()`函数到高级的`gridExtra`、`ggplot2`和`cowplot`包,每种方法都有其独特的优势和应用场景。通过掌握这些技术,你可以根据实际需求灵活地组合图形,从而更高效地展示和解读数据。希望本文能为你提供一些有益的参考和启示。
1106 2
|
人工智能 自然语言处理 前端开发
LangChain 构建问题之MetaGPT 和 ChatDev 的支持功能差异如何解决
LangChain 构建问题之MetaGPT 和 ChatDev 的支持功能差异如何解决
597 0
|
搜索推荐 Docker 容器
生信分析代码之前还好好的,怎么就报错了 Error in Ops. data. frame(guide_loc, panel_loc) :'==' only defined for equally-sized data frames
执行 `DimPlot` 函数时遇到错误 `;Error in Ops. data. frame(g guides_loc, panel_loc) : &#39;==&#39; only defined for equally-sized data frames`。解决方案和办法
2867 0
生信分析代码之前还好好的,怎么就报错了 Error in Ops. data. frame(guide_loc, panel_loc) :'==' only defined for equally-sized data frames
|
弹性计算
阿里云服务器租用价格表,2024年5月最新报价整理
2024年5月,阿里云发布了最新的服务器租用价格表。其中,ECS云服务器2核2G3M带宽年费99元,ECS u1实例2核4G5M年费199元。轻量应用服务器香港30M带宽月费24元,年费288元。此外,还提供4核16G10M和8核32G10M的不同配置选项,价格分别为30元/月和109元/月起。阿里云服务器分为ECS和轻量应用服务器,当前优惠主要针对ECS。更多详细配置和价格可在官方页面查看。同时,阿里云有多种优惠活动,包括免费试用、学生优惠等,可在活动中心了解。
1693 9
|
存储 缓存 Ubuntu
Docker详解:如何创建运行Memcached的Docker容器
Docker详解:如何创建运行Memcached的Docker容器
278 0
|
机器学习/深度学习 传感器 数据采集
使用Python实现深度学习模型:智能工业与工业4.0技术
【8月更文挑战第15天】 使用Python实现深度学习模型:智能工业与工业4.0技术
309 0
|
移动开发 算法 Java
经验大分享:PAML简介
经验大分享:PAML简介
967 0