我已经用 Sage 和 R 进行了一些数据分析,此时我想制作一组漂亮的图来浓缩结果,以便我可以正确地呈现它们。
我所做的是在下拉菜单中将整个笔记本设置为 R。然后我在多个单元格中执行一些代码。效果很好。我有代码的最大单元格填满了我的大部分屏幕(五个大型 SQL 选择从数据库中提取数据并存储在变量中)。因此,对于某些代码,似乎根本没有任何限制。
现在我正在做绘图。我从这两行开始得到一个画布:
png("temp.png", width=1800, height=1000)
par(mfrow=c(2,2))
然后我想在同一个 PNG 中获得四个图,以便很好地压缩在一起。但是 Sage 只是拒绝显示所有四个情节的任何情节结果。仅仅拥有前两个地块就很好(我在底部有两个空格)。前两个情节都很好,或者中间两个情节,或者最后两个情节,或者第一个和最后一个情节。但是三个情节不起作用,四个情节也不起作用。
所以我尝试了一些更简单的方法,比如:
png("temp.png", width=1800, height=1000)
par(mfrow=c(2,2))
plot(1:20)
plot(20:1)
plot(seq(5,15,0.5))
plot(seq(15,5,-0.5))
dev.off()
这段代码效果很好,我得到了四个简单的图。我什至可以将其扩展为看起来更像我实际尝试绘制的内容并使其工作:
png("temp.png", width=1800, height=1000)
par(mfrow=c(2,2))
plot(1:20)
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="")
par(new=T)
plot(data.frame(seq(0,20), seq(0,20)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="")
plot(20:1)
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="")
par(new=T)
plot(data.frame(seq(0,20), seq(0,20)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="")
plot(seq(5,15,0.5))
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="")
par(new=T)
plot(data.frame(seq(0,20), seq(0,20)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="")
plot(seq(15,5,-0.5))
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="")
par(new=T)
plot(data.frame(seq(0,20), seq(0,20)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="")
dev.off()
到目前为止,一切都很好。在我看来,我想如何显示我的数据应该工作的想法。但是我的实际代码不起作用。这是我的实际绘图单元格中的样子(什么都不显示):
png("temp.png", width=1800, height=1000)
par(mfrow=c(2,2))
smoothScatter(WFr, colramp=colorRampPalette(c("white", "black")), xlab="Julian day", ylab="Residual", xlim=c(175,279), ylim=c(-0.3,0.3), main="Wild Females, model residuals over time")
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
par(new=T)
plot(data.frame(seq(100,299), WFrlm$coef[1]+WFrlm$coef[2]*seq(100,299)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
smoothScatter(WMr, colramp=colorRampPalette(c("white", "black")), xlab="Julian day", ylab="Residual", xlim=c(175,279), ylim=c(-0.3,0.3), main="Wild Males, model residuals over time")
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
par(new=T)
plot(data.frame(seq(100,299), WMrlm$coef[1]+WMrlm$coef[2]*seq(100,299)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
smoothScatter(CFr, colramp=colorRampPalette(c("white", "black")), xlab="Julian day", ylab="Residual", xlim=c(175,279), ylim=c(-0.3,0.3), main="Cultured Females, model residuals over time")
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
par(new=T)
plot(data.frame(seq(100,299), CFrlm$coef[1]+CFrlm$coef[2]*seq(100,299)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
smoothScatter(CMr, colramp=colorRampPalette(c("white", "black")), xlab="Julian day", ylab="Residual", xlim=c(175,279), ylim=c(-0.3,0.3), main="Cultured Males, model residuals over time")
lines(c(0,500),c(0,0), lwd=1, col="Black", xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
par(new=T)
plot(data.frame(seq(100,299), CMrlm$coef[1]+CMrlm$coef[2]*seq(100,299)), type="l", lwd=2, col="Red", axes=F, xlab="", ylab="", xlim=c(175,279), ylim=c(-0.3,0.3))
dev.off()
这里有什么问题?由于每个情节似乎都可以单独运行,并且当我将它们成对放置时它们会打印出来,为什么当我尝试全部四个时它们不会出现?顺便说一句,我也尝试过使用 plot() 而不是 smoothScatter() ,这是同一回事;显示 2 个地块,但不多。我也试过 par(mfrow=c(4,1)) 但没有区别。
起初我认为你可以在一个单元格中放入多少 R 代码是有限制的,但我的 SQL 选择单元格的代码比绘图单元格的代码多得多。所以我想知道是否可能存在某种超时使 Sage 停止等待 PNG 输出?我也尝试在硬盘驱动器中搜索“temp.png”,但没有任何显示。
您可以将多少数据传递给 Sage 中的绘图是否有限制?我可以以某种方式调整它吗?或者我可以进入某种调试模式以更好地理解为什么当我将所有四个图都添加到输出时什么都没有发生?