Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling gnuplot from java? (ubuntu)

Tags:

java

gnuplot

I'm not sure if this is possible, especially since Java runs through a VM, but can I call gnuplot from within Java? Perhaps I could have Java open a terminal and input

gnuplot
plot ...

etc?

like image 509
rhombidodecahedron Avatar asked Jul 07 '10 15:07

rhombidodecahedron


4 Answers

Use gnujavaplot.

like image 96
mcandre Avatar answered Oct 01 '22 06:10

mcandre


If you can get gnuplot to take all input from the command line or standard input (or read it from a file) and write its output to files as well, then there should be no problem doing this using ProcessBuilder.

like image 38
Michael Borgwardt Avatar answered Oct 05 '22 06:10

Michael Borgwardt


This works on 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);
}
like image 27
Yohann Sulaiman Avatar answered Oct 01 '22 06:10

Yohann Sulaiman


Use the JavaGnuplotHybrid library.

It is very light weight (only 3 core classes) and enables hybrid programming with Java and Gnuplot.

  1. Hybrid programming with Java and Gnuplot
  2. Very light weight (just three core Classes)
  3. Use tags in Gnuplot code to execute functions or get fields' values in Java.
  4. Support both synchronized and asynchronized running of Gnuplot in Java. (synchronized: your java program will wait until you close the popped Gnuplot window; asynchronized: you java program will not wait.)
  5. Capture error/normal text output of Gnuplot to the java terminal
  6. Read Gnuplot code from xml files
  7. Support Gnuplot code template.

For more details:

  1. Project page: https://github.com/mleoking/JavaGnuplotHybrid
  2. Examples: https://github.com/mleoking/JavaGnuplotHybrid/blob/master/javagnuplothybrid/doc/examples.md
like image 20
Changwang Zhang Avatar answered Oct 04 '22 06:10

Changwang Zhang