如何使用函数生成jpeg图?

时间:2018-08-15 10:40:08

标签: r plot

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

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()来调整绘图特征时如何生成绘图吗? 谢谢

1 个答案:

答案 0 :(得分: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")