我使用R绘制一个简单的线性回归 . 我想将该图像保存为PNG或JPEG,是否可以自动执行? (通过代码)
有两个不同的问题:首先,我已经在我的显示器上查看情节了,我想保存原样 . 其次,我还没有生成情节,但是当我执行绘图代码时,我想直接将它保存到磁盘 .
像这样
png('filename.png') # make plot dev.off()
或这个
# sometimes plots do better in vector graphics svg('filename.svg') # make plot dev.off()
pdf('filename.pdf') # make plot dev.off()
也许还有其他人 . 它们都在帮助页面中列出 .
如果您使用 ggplot2 ,首选的保存方式是使用 ggsave . 首先你必须绘制,在创建情节后你调用 ggsave :
ggplot2
ggsave
ggplot(...) ggsave("plot.png")
图像的格式由您为文件名选择的扩展名决定 . 其他参数可以传递给 ggsave ,特别是 width , height 和 dpi .
width
height
dpi
plotpath<- file.path(path, "PLOT_name",paste("plot_",file,".png",sep="")) png(filename=plotpath) plot(x,y, main= file) dev.off()
如果你使用R Studio http://rstudio.org/,有一个特殊的菜单可以保存您喜欢的任何格式以及您选择的任何分辨率
要添加这些答案,如果你有一个R脚本包含生成绘图的调用(本机设备),那么这些都可以保存到pdf文件(非交互式shell的默认设备)“Rplots.pdf “(默认名称)通过将脚本从终端重定向到R(假设您运行的是Linux或OS X),例如:
R < myscript.R --no-save
这可以根据需要转换为jpg / png
如果按照 Andrie (最佳答案)的建议使用 png() , bmp() , pdf() 等打开设备,带有图表的窗口将不会弹出打开,只会创建* .png,* bmp或* .pdf文件 . 这在大规模计算中很方便,因为R只能处理有限数量的图形窗口 .
png()
bmp()
pdf()
但是,如果要查看绘图并保存它们,请在绘制绘图并且包含它们的窗口处于活动状态后调用 savePlot(filename, type) .
savePlot(filename, type)
dev.copy(png,'path/pngFile.png') plot(YData ~ XData, data = mydata) dev.off()
在某些情况下,人们想要保存并打印基础r图 . 我花了一点时间想出了这个实用功能:
x = 1:10 basesave = function(expr, filename, print=T) { #extension exten = stringr::str_match(filename, "\\.(\\w+)$")[, 2] switch(exten, png = { png(filename) eval(expr, envir = parent.frame()) dev.off() }, {stop("filetype not recognized")}) #print? if (print) eval(expr, envir = parent.frame()) invisible(NULL) } #plots, but doesn't save plot(x) #saves, but doesn't plot png("test.png") plot(x) dev.off() #both basesave(quote(plot(x)), "test.png") #works with pipe too quote(plot(x)) %>% basesave("test.png")
请注意,必须使用 quote ,否则 plot(x) 调用将在全局环境中运行, NULL 将传递给 basesave() .
quote
plot(x)
NULL
basesave()
有两个密切相关的问题,每个问题都有答案 .
要保存绘图,您需要执行以下操作:
使用 png() , bmp() , pdf() 或类似名称打开设备
绘制模型
使用 dev.off() 关闭设备
dev.off()
用于将绘图保存到 png 文件的一些示例代码:
png
fit <- lm(some ~ model) png(filename="your/file/location/name.png") plot(fit) dev.off()
这在图形格式 ?png , ?bmp , ?jpeg 和 ?tiff 的(组合)帮助页面以及 ?pdf 的单独帮助页面中进行了描述 .
?png
?bmp
?jpeg
?tiff
?pdf
但请注意,磁盘上的图像可能与直接绘制到屏幕上的相同图表看起来不同,例如,如果您已调整屏幕窗口的大小 .
请注意,如果您的绘图是由 lattice 或 ggplot2 制作的,则必须明确打印绘图 . 请参阅此答案,更详细地解释了这一点,并链接到R常见问题解答:ggplot's qplot does not execute on sourcing
lattice
dev.print(pdf, 'filename.pdf')
这应该完美地复制图像,尊重您对交互式窗口所做的任何调整 . 您可以像在本答案的第一部分中一样,将 pdf 替换为其他文件类型,例如 png .
pdf
对于第一个问题,我发现 dev.print 在交互式工作时是最好的 . 首先,您可以直观地设置绘图,当您对所看到的内容感到满意时,可以要求R将当前绘图保存到磁盘
dev.print
dev.print(pdf, file="filename.pdf");
您可以将 pdf 替换为其他格式,例如 png .
这将完全按照您在屏幕上看到的方式复制图像 . dev.copy 的问题在于图像通常不同,并且不记得窗口大小和纵横比 - 它会强制绘图默认为方形 .
dev.copy
对于第二个问题,(正如其他人已经回答的那样),您必须在执行绘图命令之前将输出定向到磁盘
pdf('filename.pdf') plot( yourdata ) points (some_more_data) dev.off() # to complete the writing process and return output to your monitor
如果你想继续看R中的情节,另一种选择是使用 dev.copy :
X11 () plot (x,y) dev.copy(jpeg,filename="plot.jpg"); dev.off ();
如果在R中出现太多绘图窗口的混乱,请使用 graphics.off() 关闭所有绘图窗口 .
graphics.off()
11 回答
像这样
或这个
或这个
也许还有其他人 . 它们都在帮助页面中列出 .
如果您使用
ggplot2
,首选的保存方式是使用ggsave
. 首先你必须绘制,在创建情节后你调用ggsave
:图像的格式由您为文件名选择的扩展名决定 . 其他参数可以传递给
ggsave
,特别是width
,height
和dpi
.如果你使用R Studio http://rstudio.org/,有一个特殊的菜单可以保存您喜欢的任何格式以及您选择的任何分辨率
要添加这些答案,如果你有一个R脚本包含生成绘图的调用(本机设备),那么这些都可以保存到pdf文件(非交互式shell的默认设备)“Rplots.pdf “(默认名称)通过将脚本从终端重定向到R(假设您运行的是Linux或OS X),例如:
这可以根据需要转换为jpg / png
如果按照 Andrie (最佳答案)的建议使用
png()
,bmp()
,pdf()
等打开设备,带有图表的窗口将不会弹出打开,只会创建* .png,* bmp或* .pdf文件 . 这在大规模计算中很方便,因为R只能处理有限数量的图形窗口 .但是,如果要查看绘图并保存它们,请在绘制绘图并且包含它们的窗口处于活动状态后调用
savePlot(filename, type)
.在某些情况下,人们想要保存并打印基础r图 . 我花了一点时间想出了这个实用功能:
请注意,必须使用
quote
,否则plot(x)
调用将在全局环境中运行,NULL
将传递给basesave()
.有两个密切相关的问题,每个问题都有答案 .
1.将来会在我的脚本中生成一个图像,如何将其保存到磁盘?
要保存绘图,您需要执行以下操作:
使用
png()
,bmp()
,pdf()
或类似名称打开设备绘制模型
使用
dev.off()
关闭设备用于将绘图保存到
png
文件的一些示例代码:这在图形格式
?png
,?bmp
,?jpeg
和?tiff
的(组合)帮助页面以及?pdf
的单独帮助页面中进行了描述 .但请注意,磁盘上的图像可能与直接绘制到屏幕上的相同图表看起来不同,例如,如果您已调整屏幕窗口的大小 .
请注意,如果您的绘图是由
lattice
或ggplot2
制作的,则必须明确打印绘图 . 请参阅此答案,更详细地解释了这一点,并链接到R常见问题解答:ggplot's qplot does not execute on sourcing2.我正在查看我的屏幕上的情节,我想将其“原样”复制到磁盘上 .
这应该完美地复制图像,尊重您对交互式窗口所做的任何调整 . 您可以像在本答案的第一部分中一样,将
pdf
替换为其他文件类型,例如png
.对于第一个问题,我发现
dev.print
在交互式工作时是最好的 . 首先,您可以直观地设置绘图,当您对所看到的内容感到满意时,可以要求R将当前绘图保存到磁盘您可以将
pdf
替换为其他格式,例如png
.这将完全按照您在屏幕上看到的方式复制图像 .
dev.copy
的问题在于图像通常不同,并且不记得窗口大小和纵横比 - 它会强制绘图默认为方形 .对于第二个问题,(正如其他人已经回答的那样),您必须在执行绘图命令之前将输出定向到磁盘
如果你想继续看R中的情节,另一种选择是使用
dev.copy
:如果在R中出现太多绘图窗口的混乱,请使用
graphics.off()
关闭所有绘图窗口 .