簡體   English   中英

如何使用函數生成jpeg圖?

[英]How to produce a jpeg plot using a function?

我有以下示例代碼用於為具有分類變量的數據框生成箱形圖。

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()來調整繪圖特征時如何生成繪圖嗎? 謝謝

嘗試

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM