【问题标题】:Issues plotting multiple graphs using Java, R and JavaGD?使用 Java、R 和 JavaGD 绘制多个图时出现问题?
【发布时间】:2012-01-03 21:22:42
【问题描述】:

我已经使用 Java、JavaGD 和 R 成功绘制了一个图形。我遵循了 this 教程。

现在,我有一个 R 脚本,它读取 CSV 文件并进行一些计算。最后,它绘制了 8 个不同的图表。当我使用 Java/JavaGD 运行这个脚本时,只有第 1 个和第 8 个图可见。第 2 到第 7 个在“非活动”窗口上,它们是空白的。我使用与上述链接/教程中完全相同的代码。所以我猜有些东西被覆盖了。

如何在适当的窗口上绘制它们?此外,如果重新调整大小,第一个窗口将变为空白。如何解决这个问题?

如有需要,请随时要求澄清。我不确定我对问题的解释有多好。

非常感谢任何帮助/阅读材料。

更新 1:

目前,我正在使用此代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Rengine re;
    String[] dummyArgs = new String[1];
    dummyArgs[0] = "--vanilla";
    re = new Rengine(dummyArgs, false, null);
    re.eval("library(JavaGD)");

    // This is the critical line: Here, we tell R that the JavaGD() device that
    // it is supposed to draw to is implemented in the class MyJavaGD. If it were
    // in a package (say, my.package), this should be set to
    // my/package/MyJavaGD1.
    re.eval("Sys.putenv('JAVAGD_CLASS_NAME'='test/MyJavaGD1')");

    re.eval("JavaGD()");
//      re.eval("plot(c(1,5,3,8,5), type='l', col=2)");
//      re.eval("source(\"C:\\Documents and Settings\\username\\My Documents\\Test Data\\BoxPlot.r\");");
        re.eval("source(\"C:\\\\Documents and Settings\\\\username\\\\My Documents\\\\sampleRScript.R\")");
        re.end();
        System.out.println("Done!");
    }

部分脚本:

par(las=2,mfrow=c(2,1))
PlotData <- subset (m4, select=c(LotNo,def,cavity,Lift), subset=(cavity=="1"))
boxplot(Lift ~ def, data=PlotData, main="Number 1")
hist(PlotData$Lift,50, main="", xlab="Lift", ylab="Frequency")
win.graph()
par(las=2,mfrow=c(2,1))
PlotData <- subset (m4, select=c(LotNo,def,cavity,Lift), subset=(cavity=="2"))
boxplot(Lift ~ def, data=PlotData, main="Number 2")
hist(PlotData$Lift,50, main="", xlab="Lift", ylab="Frequency")
win.graph()
par(las=2,mfrow=c(2,1))
PlotData <- subset (m4, select=c(LotNo,def,cavity,Lift), subset=(cavity=="3"))
boxplot(Lift ~ def, data=PlotData, main="Number 3")
hist(PlotData$Lift,50, main="", xlab="Lift", ylab="Frequency")
.
.
.

【问题讨论】:

  • 我们在链接中看到一些用于绘制一个图的代码,但您没有显示用于绘制 8 个图的代码。尝试将其归结为一小段重现您的问题的 R 代码。这会让帮助我们变得更容易。
  • @PaulHiemstra:我使用的代码与链接中的代码相同。我已经更新了这个问题。请看一看。

标签: java r rjava


【解决方案1】:

您需要使用.jengine() 告诉 R 实例您已初始化的 JRI,否则它无法发出回调,例如调整窗口大小。至于空白窗口,您需要提供您使用的代码。

(您可能想使用 stats-rosuda-devel 在那里讨论与 rJava/JRI/JavaGD 相关的问题。)

【讨论】:

  • 你能提供更多关于.jengine()的细节吗?任何示例或链接?
  • 这是 rJava 中的命令 - 请参阅 ?.jengine。建议使用类似于re.eval("{library(rJava); .jengine()}")。您可以发布您的sampleScript.R 代码以便我们查看消隐问题吗?
  • .. 不完整 - win.graph() 是什么??
  • 您可以忽略... 并将其视为完整。同一组 4 行(从 par(hist()在每个 win.graph(); 之后重复,总共 8 次,因此我删除了重复。正如我之前提到的,它绘制了 8 个图表。 win.graph() 是一个 R 函数,用于打开另一个图形窗口。它不是我写的,因此我不确定是否可以共享整个脚本。如果您需要更多说明,请告诉我。
  • 好吧,那就问作者(为什么不行)。它不是 R 的一部分 - 为什么不直接使用 dev.new()??
猜你喜欢
  • 2016-05-21
  • 2016-02-03
  • 2015-11-11
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2014-06-28
相关资源
最近更新 更多