JavaPlot и gnuplot - PullRequest
       19

JavaPlot и gnuplot

2 голосов
/ 17 февраля 2012

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

Я также скачал 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, и после сюжета необходимо добавить «-perist».К счастью, JavaPlot также имеет функцию, которая делает это:

p.setPersist(true);

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

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

Ответы [ 5 ]

1 голос
/ 20 февраля 2012

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

В GnuPlotParameters я вижу код

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

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

РЕДАКТИРОВАТЬ:

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

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

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

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

0 голосов
/ 28 марта 2016

Попробуйте 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

0 голосов
/ 12 марта 2013

попробуйте

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 голосов
/ 11 марта 2013

замените

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

на

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

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

0 голосов
/ 06 марта 2013

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

p.set("term", "x11 persist");
...