我正在尝试使用网格命令生成多个图,如下所示:
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
admin.auth().createCustomToken(uid, additionalClaims ? additionalClaims : {})
问题是,虽然单个代码片段工作正常但是在执行for循环时生成的文件没有任何绘图。该代码适用于非格子生成的其他图。有谁知道如何解决这个问题?
此致 大卫
答案 0 :(得分:0)
将lapply
函数包含在索引遍历中的操作是一种可扩展的解决方案。
来自ggplot的facet_grid
提供了另一种绘图方案。
注意aes_string
用于字符串变量和as.formula
用于构造动态公式。
data(mtcars)
library("lattice")
library("ggplot2")
fn_exportPlot = function(
dataObj = mtcars,
indepVar = "cyl",
depVar = "mpg",
groupVar = "am",
plotEngine=c("lattice","ggplot")) {
filePath = paste0(indepVar,"_",plotEngine,'.png')
png(filePath,width=760)
if(plotEngine=="lattice"){
formulaVar = as.formula(paste0(depVar," ~ ",indepVar,"|",groupVar))
print(xyplot(formulaVar,data=dataObj))
}else{
groupForm = as.formula(paste0("~ ",groupVar))
gg = ggplot(mtcars,aes_string(indepVar,depVar)) + geom_point(shape=1) + facet_grid(groupForm)
print(gg)
}
dev.off()
}
varList = c("cyl","disp")
lapply(varList,function(x) fn_exportPlot(indepVar = x,plotEngine="lattice") )
lapply(varList,function(x) fn_exportPlot(indepVar = x,plotEngine="ggplot") )