我有以下示例代码用于为具有分类变量的数据框生成箱形图。
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()来调整绘图特征时如何生成绘图吗? 谢谢
答案 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")