既然可以将R图导出为PDF或PNG或SVG等,那么是否可以一次将R图导出为多种格式? 例如,将绘图导出为 PDF 和 PNG 和 SVG,而不重新计算绘图?
不使用ggplot2
和其他软件包,这里有两个替代解决方案。
-
创建一个函数,使用指定的设备生成绘图并对其进行
sapply
# Create pseudo-data x <- 1:10 y <- x + rnorm(10) # Create the function plotting with specified device plot_in_dev <- function(device) { do.call( device, args = list(paste("plot", device, sep = ".")) # You may change your filename ) plot(x, y) # Your plotting code here dev.off() } wanted_devices <- c("png", "pdf", "svg") sapply(wanted_devices, plot_in_dev)
-
使用内置函数
dev.copy
# With the same pseudo-data # Plot on the screen first plot(x, y) # Loop over all devices and copy the plot there for (device in wanted_devices) { dev.copy( eval(parse(text = device)), paste("plot", device, sep = ".") # You may change your filename ) dev.off() }
第二种方法可能有点棘手,因为它需要非标准评估。然而,它也是有效的。这两种方法都适用于其他绘图系统,包括ggplot2
只需将绘图生成代码替换为上述plot(x, y)
- 您可能需要显式print
ggplot 对象。
是的,绝对! 这是代码:
library(ggplot2)
library(purrr)
data("cars")
p <- ggplot(cars, aes(speed, dist)) + geom_point()
prefix <- file.path(getwd(),'test.')
devices <- c('eps', 'ps', 'pdf', 'jpeg', 'tiff', 'png', 'bmp', 'svg', 'wmf')
walk(devices,
~ ggsave(filename = file.path(paste(prefix, .x)), device = .x))