R 用户定义的函数保存图形 - dev.off() 出错?
Posted
技术标签:
【中文标题】R 用户定义的函数保存图形 - dev.off() 出错?【英文标题】:R user-defined function saving graphics - error with dev.off()? 【发布时间】:2018-06-15 02:37:01 【问题描述】:我正在尝试创建一个函数来绘制我的 PCA(prcomp 对象)的图。然后,这些图将保存在作为函数参数之一的目录集中。
每当我单独执行它时,它都会起作用。可以从函数中打印图形(因此代码中没有大问题)。该函数确实在正确的目录中创建了一个文件,名称正确,但它都是空白的......
这是代码(有点长..):
#arg1: the PCA object that we want to plot
#arg2: the list of sample names
#arg3: where to save the plots
#arg4: description of the treatment done
PlotPCA<- function(arg1, arg2, arg3, arg4)
library(ggplot2)
DFplot<-data.frame(arg1$x, Sple=arg2)
arg2<-as.factor(arg2)
DFplot.PoV <- arg1$sdev^2/sum(arg1$sdev^2)
LoadMat1 <- arg1$rotation # the matrix of variable loadings (i.e., a matrix whose columns contain the eigenvectors)
ScoreMat1 <- predict(arg1)
percentage<-paste( colnames(DFplot), "(", paste(as.character((round(DFplot.PoV, digits = 4))*100), "%", ")", sep="") )
themePCA<-theme(panel.background = element_blank(),panel.border=element_rect(fill=NA),panel.grid.major = element_blank(),panel.grid.minor = element_blank(),strip.background=element_blank(),axis.text.x=element_text(colour="black"),axis.text.y=element_text(colour="black"),axis.ticks=element_line(colour="black"),plot.margin=unit(c(1,1,1,1),"line"))
setwd(arg3)
png(file=paste0("PC1$2 on ",arg4,Sys.Date(),".png"),width=4000,height=3000,res =300)
ggplot(DFplot,aes(x=PC1,y=PC2,col=arg2, label=arg2))+
labs(title=paste0("PC1$2 on",arg4,Sys.Date()),
colour="Samples (same color =
same composition)")+
geom_text()+ # Add labels
themePCA+ #for whit background
xlab(percentage[1])+ ylab(percentage[2])+
theme(legend.position="none")
dev.off()
setwd(arg3)
png(file=paste0("PC2$3 on ", arg4, Sys.Date(), ".png"), width=4000,height=3000,res =300,antialias = c("default"))
ggplot(DFplot,aes(x=PC3,y=PC4,col=arg2, label=arg2))+
labs(title=paste0("PC2$3 on", arg4, Sys.Date()),
colour="Samples (same color =
same composition)")+
#geom_point(size=0.5,alpha=0.5)+ #Size and alpha just for fun
geom_text()+ # Add labels
#scale_color_manual(values=ColPB)+
themePCA+ #for whit background
xlab(percentage[3])+ ylab(percentage[4])+
theme(legend.position="none")
dev.off()
'
我得到的印象来自 dev.off()
空设备 1
知道如何解决这个问题吗?
【问题讨论】:
在函数环境中运行setwd(arg3)
可能不是一个好主意...也许参数 path_to_save
会更好
打印你的 ggplot 对象
【参考方案1】:
您需要将绘图保存在 p <- ggplot(...) + ...
之类的变量中,然后打印变量 print(p)
或 - 更好的是 - 使用函数 ggsave
这是保存使用 ggplot2 创建的绘图的预期方法。
【讨论】:
以上是关于R 用户定义的函数保存图形 - dev.off() 出错?的主要内容,如果未能解决你的问题,请参考以下文章