2012-02-17 3 views
2

Я отчаянно пытаюсь заставить Java и gnuplot играть хорошо. Я начал использовать JavaPlot и добавил jar к пути к классам (используя Eclipse).JavaPlot и gnuplot

Я также загрузил gnuplot и разместил его в надежном месте.

Первый вопрос, все примеры, данные JavaPlot, предполагают, что вы поместили gnuplot в нужное место, где это я понятия не имею. Поэтому их пример:

import com.panayotis.gnuplot.JavaPlot; 

public class test { 

    public static void main(String[] args) { 

     JavaPlot p = new JavaPlot(); 
     p.addPlot("sin(x)"); 
     p.plot(); 

    } 
} 

будет работать только тогда, когда Gnuplot добавляется путь к классам, какие-либо идеи о том, где это может быть и как?

Не волнуйтесь, хотя, как вы можете определить местоположение Gnuplot в конструкторе JavaPlot, например, так:

import com.panayotis.gnuplot.JavaPlot; 

public class test { 

    public static void main(String[] args) { 

     JavaPlot p = new JavaPlot("D:/Eclipse/gnuplot/binary/pgnuplot.exe"); 
     p.addPlot("sin(x)"); 
     p.plot(); 

    } 
} 

Это что-то, если вы быстро вы можете увидеть график появляются (правильно , можно увидеть синусоидальную волну), а затем сразу же исчезнуть. Я читал в Интернете, что в самом приложении gnuplot это обычное явление при использовании Windows и что после сюжета необходимо добавить «-перст». К счастью JavaPlot также имеет функцию, которая делает это:

p.setPersist(true); 

Но в моем случае это не делает ничего. Итак, второй вопрос: кто-то использовал gnuplot, JavaPlot и Windows 7 64bit раньше и умеет это делать? Из моего Googling я понимаю, что pgnuplot - правильный .exe для запуска?

Что мне не хватает? Что я делаю не так?

Приветствия

ответ

1

Я думаю, что, возможно, обходной путь для вас, как я столкнулся с такой же вещь сегодня, когда доступ к JavaPlot на Windows 7 (32 бит, хотя здесь). Да, pgnuplot.exe - это тот, который вы хотите, однако вам не нужно явно устанавливатьPersist, если вы этого не хотите, потому что JavaPlot делает это для вас. Мне нужно было пройти через исходный код и прокомментировать строку.

В GnuPlotParameters, я вижу код

 /* Finish! */ 
    bf.append("quit").append(NL); 

Это линии 198-199. Затем окна сюжета остаются открытыми. Теперь то, что это также делает, - оставить открытым gnuplot. Если вы не возражаете, вы можете увидеть свои графики таким образом. Еще не выяснили, как закрыть gnuplot, оставив окно графика открытым.

EDIT:

Может быть, более подходящий способ не закомментировать строки 199 и пойти с этим:

 bf.append("pause -1").append(NL); 

     /* Finish! */ 
    bf.append("quit").append(NL); 

Таким образом, диалог паузы приходит. Это позволяет вам увидеть сюжет. Когда вы отклоняете диалог, все идет до свидания.

0

Я использую eclipse для отладки и использую этот пакет. Я понял, как это исправить. Добавьте в свой код следующее. По умолчанию setPersist (true) работает некорректно.

p.set («term», «x11 persist»);

-2

заменить ваш

p.addPlot("sin(x)"); 

по

p.addPlot("sin(x); pause 100;"); 

появляется только в течение 100 секунд FSD

0

попробовать этот

try { 
     Runtime rt = Runtime.getRuntime(); 
     Process proc = rt.exec("D:/Projet/X-Gnuplot_4.6.0_rev6/Bin/gnuplot/bin/gnuplot.exe"); 

      java.io.OutputStream opStream = proc.getOutputStream(); 
      PrintWriter gp = new PrintWriter(new BufferedWriter(new OutputStreamWriter(opStream))); 
      gp.println("plot sin(x); pause mouse close;\n"); 
      gp.close(); 


     int exitVal = proc.waitFor(); 
     System.out.println("Exited with error code "+exitVal); 
    } catch(Exception e) { 
     System.out.println(e.toString()); 
     e.printStackTrace(); 
    } 

это работает для меня

0

Try JavaGnuplotHybrid: https://github.com/mleoking/JavaGnuplotHybrid

Это решает проблему сразу исчезают.

Вот пример для 2D участка:

public void plot2d() { 
    JGnuplot jg = new JGnuplot(); 
    Plot plot = new Plot("") { 
     { 
      xlabel = "x"; 
      ylabel = "y"; 
     } 
    }; 
    double[] x = { 1, 2, 3, 4, 5 }, y1 = { 2, 4, 6, 8, 10 }, y2 = { 3, 6, 9, 12, 15 }; 
    DataTableSet dts = plot.addNewDataTableSet("2D Plot"); 
    dts.addNewDataTable("y=2x", x, y1); 
    dts.addNewDataTable("y=3x", x, y2); 
    jg.execute(plot, jg.plot2d); 
} 

enter image description here