在Sage中进行R绘图时是否有限制?

在Sage中进行R绘图时是否有限制?,r,plot,sage,R,Plot,Sage,我已经用Sage和R做了一些数据分析,现在我想制作一组很好的曲线图来浓缩结果,以便我能够正确地展示它们 我所做的是在下拉菜单中将整个笔记本设置为R。然后我在许多单元格中执行一些代码。效果很好。屏幕上最大的一个单元格充满了我的代码(五个大型SQL选择从数据库中提取数据并存储在变量中)。因此,对于某些代码来说,似乎根本没有任何限制 现在我在做策划。我从这两行开始画画布: png("temp.png", width=1800, height=1000) par(mfrow=c(2,2)) 然后我想在

我已经用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()
到目前为止还不错。在我看来,我喜欢我的想法,我想显示我的数据应该如何工作。但我的实际代码不起作用。下面是在我的实际绘图单元中的外观(没有显示任何内容):

这里怎么了?既然每一个情节看起来都很好地独立运作,而且当我把它们成对地放在一起时,它们确实会打印出来,为什么当我试着用这四个情节时,它们不会出现呢?顺便说一句,我也尝试了plot()而不是smoothScatter(),这是同样的事情;显示2个绘图,但不显示更多。我也试过par(mfrow=c(4,1)),但没有差别

起初,我认为在一个单元格中可以放入多少R代码是有限制的,但我的SQL select单元格的代码比绘图单元格的代码多得多。所以我想知道是否有某种类型的超时使得Sage停止等待PNG输出?我也试着在我的硬盘上搜索“temp.png”,但没有找到任何东西

在Sage中,可以向绘图传递多少数据有限制吗?我能调整一下吗?或者,我是否可以进入某种调试模式,以便更好地理解为什么在将所有四个绘图添加到输出时什么也没有发生?

简短版本,完整性如下:

如果您有自己的安装,那么在devel/sage/sage/interfaces/r.py中,替换

eval_using_file_cutoff=1024)
在字符数方面使用您想要的截断。(您必须在重新启动服务器之前执行
/sage-b
)如果不执行此操作,您将无法使用下拉菜单直接解决此问题,不过在正常的sage菜单中使用带有一些额外选项的
r.eval()
可以完成此操作。

的简短版本,为了完整性:

如果您有自己的安装,那么在devel/sage/sage/interfaces/r.py中,替换

eval_using_file_cutoff=1024)

在字符数方面使用您想要的截断。(您必须在重新启动服务器之前执行
/sage-b
)如果不这样做,您将无法使用下拉菜单直接解决此问题,尽管在正常的sage菜单中使用
r.eval()
和一些额外选项应该可以做到这一点。

没有必要更改任何r.py代码,正如kcrisman在回答中所建议的那样。R代码始终运行,但当代码长度超过1024个字符时,R代码将作为脚本文件而不是命令行运行,然后Sage无法检测生成的任何输出

我发现的解决方法是将长代码片段的输出保存到已知文件中,例如用于绘图的“~/temp.png”。然后可以使用下一个单元格绘制虚拟绘图,然后将先前创建的绘图写入画布。由于此绘图是由较短的代码(少于1024个字符)生成的,因此Sage将能够检测第二次生成的输出。以下是我使用的代码:

png("~/output.png", width=1800, height=1000)
par(mfrow=c(2,2))
# do fancy plot stuff here
dev.off()
# <---- I used a second cell here ---->
library(png)
x <- readPNG("~/output.png")
png("tmp.png", width=1800, height=1000)
plot(1:2, type="n", axes=F, xlab="", ylab="")
# rasterImage() prints on the plot. The plot goes from x = c(1,2) to y = c(1,2).
# So we tell rasterImage() to print within that x/y (i.e. "1,1,2,2") to keep
# the plot scaled correctly.
rasterImage(x, 1, 1, 2, 2)
dev.off()
png(“~/output.png”,宽=1800,高=1000)
par(mfrow=c(2,2))
#在这里做些别出心裁的事情
发展主任()
# 
图书馆(png)

正如kcrisman在他的回答中所建议的那样,没有必要更改任何r.py代码。R代码始终运行,但当代码长度超过1024个字符时,R代码将作为脚本文件而不是命令行运行,然后Sage无法检测生成的任何输出

我发现的解决方法是将长代码片段的输出保存到已知文件中,例如用于绘图的“~/temp.png”。然后可以使用下一个单元格绘制虚拟绘图,然后将先前创建的绘图写入画布。由于此绘图是由较短的代码(少于1024个字符)生成的,因此Sage将能够检测第二次生成的输出。以下是我使用的代码:

png("~/output.png", width=1800, height=1000)
par(mfrow=c(2,2))
# do fancy plot stuff here
dev.off()
# <---- I used a second cell here ---->
library(png)
x <- readPNG("~/output.png")
png("tmp.png", width=1800, height=1000)
plot(1:2, type="n", axes=F, xlab="", ylab="")
# rasterImage() prints on the plot. The plot goes from x = c(1,2) to y = c(1,2).
# So we tell rasterImage() to print within that x/y (i.e. "1,1,2,2") to keep
# the plot scaled correctly.
rasterImage(x, 1, 1, 2, 2)
dev.off()
png(“~/output.png”,宽=1800,高=1000)
par(mfrow=c(2,2))
#在这里做些别出心裁的事情
发展主任()
# 
图书馆(png)

x刚刚发现,用#注释除smoothScatter()行以外的所有行也不会产生任何结果。然而,如果我删除这些线而不是注释它们,那么我会得到4个平滑散点图。。。所以看起来确实存在某种文本长度限制…?作为一个信息点-请参阅同一作者对同一问题的不同简化版本。刚刚发现,用#注释除smoothScatter()行之外的所有行也不会产生任何结果。然而,如果我删除这些线而不是注释它们,那么我会得到4个平滑散点图。。。因此,似乎确实存在某种文本长度限制…?作为一个信息点-请参阅同一作者对同一问题的不同简化版本。根据您在asksage回答中评论中的讨论。。。这个答案似乎并不完整。即使不改变截止值,任何能产生