从Java中调用gnuplot?(Ubuntu)

5
我不确定这是否可能,特别是因为Java通过虚拟机运行,但我能否从Java中调用gnuplot?也许我可以让Java打开终端并输入命令。
gnuplot
plot ...

等等?

5个回答

20

1
当我看到这个答案时,我只是笑了出来。 :) - Mateen Ulhaq
@kevincline SourceForge显示“最后更新:3小时前。”https://sourceforge.net/projects/gnujavaplot/ - mcandre
@mcandre:我正在重复与作者的通信。 - kevin cline
最新版本于1月15日发布,经过相当长的时间间隔,所以我猜它又活跃起来了? - rorold

3
如果您可以让gnuplot从命令行或标准输入获取所有输入(或从文件中读取),并将其输出写入文件,那么使用ProcessBuilder就没有问题。

我之前做过类似的事情。我对细节有些模糊,但我可以确认Gnuplot很乐意从文件中获取它的所有输入。它非常适合脚本编写。 - Carl Smotricz

1

使用JavaGnuplotHybrid库。

它非常轻量级(仅有3个核心类),并且可以实现Java和Gnuplot的混合编程。

  1. Java和Gnuplot的混合编程
  2. 非常轻量级(只有三个核心类)
  3. 在Gnuplot代码中使用标记来执行函数或获取Java中字段的值。
  4. 支持Java中同步和异步运行Gnuplot。(同步:您的Java程序将等待,直到您关闭弹出的Gnuplot窗口;异步:您的Java程序将不会等待。)
  5. 捕获Gnuplot的错误/正常文本输出到Java终端
  6. 从xml文件中读取Gnuplot代码
  7. 支持Gnuplot代码模板。

更多详情请查看:

  1. 项目页面:https://github.com/mleoking/JavaGnuplotHybrid
  2. 示例:https://github.com/mleoking/JavaGnuplotHybrid/blob/master/javagnuplothybrid/doc/examples.md

2
它有Maven仓库吗?我不想将一个jar文件放到我的项目中。 - ahll

1

这在 Debian 上可行:

String[] s = {"/usr/bin/gnuplot",
              "-e",
              "set term jpeg large size 800,600;set autoscale; set grid;set format y \"%0.f\";set output \"plot.jpg\";set xdata time;set timefmt \"%Y-%m-%d-%H:%M:%S\";set xlabel \"Dates\";set ylabel \"Data transferred (bytes)\";plot \""+x+"\" using 1:2 title \"Total:"+tot+"\" with linespoints;"
             };
try {
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(s);
    InputStream stdin = proc.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stdin);
    BufferedReader br = new BufferedReader(isr);
    String line = null;
    while ((line = br.readLine()) != null)
        System.err.println("gnuplot:"+line);
    int exitVal = proc.waitFor();
    if (exitVal != 0)
        log("gnuplot Process exitValue: " + exitVal);
    proc.getInputStream().close();
    proc.getOutputStream().close();
    proc.getErrorStream().close();
} catch (Exception e) {
    System.err.println("Fail: " + e);
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接