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 &lt;- ggplot(...) + ... 之类的变量中,然后打印变量 print(p) 或 - 更好的是 - 使用函数 ggsave 这是保存使用 ggplot2 创建的绘图的预期方法。

【讨论】:

以上是关于R 用户定义的函数保存图形 - dev.off() 出错?的主要内容,如果未能解决你的问题,请参考以下文章

Rstudio作图运行后看不到图如何解决?

R python在无图形用户界面时保存图片

R语言编程时如何传递文件名参数

数学 函数 图形

R-图形初阶-ch3

数学 函数 图形