0

我有以下示例代码,用于为具有分类变量的数据框生成箱线图。

DF<-data.frame("A"=rnorm(20,3,0.2),"B"=rnorm(20,2,0.1),"C"=rnorm(20,2,0.3))
DF<-stack(DF)
BPFunc <- function ( PDataSet,Cat, PData, PTitle,XTitle, YTitle,PlotName) {
  arguments <- as.list(match.call())
  PData = eval(arguments$PData, PDataSet)
  Cat = eval(arguments$Cat, PDataSet)
  PDataSet<-data.frame(Cat=Cat,PData=PData)
  bp <- ggplot(PDataSet, aes(x = Cat, y =  as.numeric( PData) , fill = factor( Cat)))
  bp <- bp + geom_boxplot(notch = F)
  bp <- bp + labs(title=PTitle, x=XTitle, y =YTitle)
  bp <- bp + theme_bw()
  bp

 }

使用以下功能可以成功使用上述功能:

BPFunc(DF,  ind  ,  values  ,"My Box","Categories","Value")

现在我希望我的代码能够使用以下修改将绘图保存在 jpeg 设备中:

BPFunc <- function ( PDataSet,Cat, PData, PTitle,XTitle, YTitle,PlotName) {
  arguments <- as.list(match.call())
  PData = eval(arguments$PData, PDataSet)
  Cat = eval(arguments$Cat, PDataSet)
  PDataSet<-data.frame(Cat=Cat,PData=PData)
  bp <- ggplot(PDataSet, aes(x = Cat, y =  as.numeric( PData) , fill = factor( Cat)))
  bp <- bp + geom_boxplot(notch = F)
  bp <- bp + labs(title=PTitle, x=XTitle, y =YTitle)
  bp <- bp + theme_bw()

  jpeg(PlotName, width=4, height=3, units="in", res=600 ) 
  par(mfrow = c(1,1), mgp=c(2, 0.5, 0),oma = c(4,3,4,3) + 0.1, mar = c(3,3,1,1)+0.1,cex=0.5   )
  bp
  graphics.off()
 }

正如我所期望的那样,我希望该函数将绘图保存在 PlotName.jpeg 文件中,并且我需要可以通过 par() 函数控制绘图特征。但是当我调用函数时,生成的 jpeg 设备是空的:

BPFunc(DF,  ind  ,  values  ,"My Box","Categories","Value","MyPlot.jpeg")

作为替代方案,我知道我可以使用 print() 函数,如下所示:

     BPFunc <- function ( PDataSet,Cat, PData, PTitle,XTitle, YTitle,PlotName) {
  arguments <- as.list(match.call())
  PData = eval(arguments$PData, PDataSet)
  Cat = eval(arguments$Cat, PDataSet)
  PDataSet<-data.frame(Cat=Cat,PData=PData)
  bp <- ggplot(PDataSet, aes(x = Cat, y =  as.numeric( PData) , fill = factor( Cat)))
  bp <- bp + geom_boxplot(notch = F)
  bp <- bp + labs(title=PTitle, x=XTitle, y =YTitle)
  bp <- bp + theme_bw()

  jpeg(PlotName, width=4, height=3, units="in", res=600 ) 
  par(mfrow = c(1,1), mgp=c(2, 0.5, 0),oma = c(4,3,4,3) + 0.1, mar = c(3,3,1,1)+0.1,cex=0.5   )
  print(bp)
  graphics.off()
 }

但是当我们使用 print() 时,绘图特性不能由 par() 函数控制。换句话说,par() 函数不适用于 print()。请帮助我知道如何制作情节,而我可以使用 par() 来调整情节特征?谢谢

4

1 回答 1

1

尝试

BPFunc <- function (PDataSet,Cat, PData, PTitle,XTitle, YTitle,PlotName) {
  arguments <- as.list(match.call())
  PData = eval(arguments$PData, PDataSet)
  Cat = eval(arguments$Cat, PDataSet)
  PDataSet<-data.frame(Cat=Cat,PData=PData)
  bp <- ggplot(PDataSet, aes(x = Cat, y =  as.numeric( PData) , fill = factor( Cat)))
  bp <- bp + geom_boxplot(notch = F)
  bp <- bp + labs(title=PTitle, x=XTitle, y =YTitle)
  bp <- bp + theme_bw()
  bp
  ggsave(PlotName, width=4, height=3, units="in", dpi=600)
}

BPFunc(DF,  ind  ,  values  ,"My Box","Categories","Value","MyPlot.jpeg")
于 2018-08-15T12:30:51.910 回答