Как сделать вывод png файла в JavaPlot - PullRequest
2 голосов
/ 21 марта 2012

я использую "> gnujavaplot, и я не нашел способа сделать выходные файлы изображений. Я просто строю график в окне gnuplot, мне нужен вывод графика в файле png.

Мне нужно что-то вроде: $ a setтерминал png $ установить вывод "filename.png" в gnujavaplot.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 24 апреля 2012

Я просто копирую свой реальный код без редактирования, так что есть несколько накладных расходов, но я думаю, что вы должны это понять.Интересная часть начинается с

ImageTerminal png = new ImageTerminal();

и не пропустите конец кода!

приветствия

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.panayotis.gnuplot.JavaPlot;
import com.panayotis.gnuplot.plot.DataSetPlot;
import com.panayotis.gnuplot.style.NamedPlotColor;
import com.panayotis.gnuplot.style.PlotStyle;
import com.panayotis.gnuplot.style.Style;
import com.panayotis.gnuplot.terminal.ImageTerminal;

public class main {
public static void main(String[] args) {
    double[][] values = new double[3][2];
    values[0][0] = 0.1;
    values[0][1] = 0.3;
    values[1][0] = 0.4;
    values[1][1] = 0.3;
    values[2][0] = 0.5;
    values[2][1] = 0.5;

    double[][] values2 = new double[3][2];
    values2[0][0] = 0.2;
    values2[0][1] = 0.0;
    values2[1][0] = 0.7;
    values2[1][1] = 0.1;
    values2[2][0] = 0.6;
    values2[2][1] = 0.5;

    PlotStyle styleDeleted = new PlotStyle();
    styleDeleted.setStyle(Style.POINTS);
    styleDeleted.setLineType(NamedPlotColor.GRAY80);

    PlotStyle styleExist = new PlotStyle();
    styleExist.setStyle(Style.POINTS);
    styleExist.setLineType(NamedPlotColor.BLACK);

    DataSetPlot setDeleted = new DataSetPlot(values);
    setDeleted.setPlotStyle(styleDeleted);
    setDeleted.setTitle("deleted EMs");

    DataSetPlot setExist = new DataSetPlot(values2);
    setExist.setPlotStyle(styleExist);
    setExist.setTitle("remaining EMs");

    ImageTerminal png = new ImageTerminal();
    File file = new File("/home/testuser/plot.png");
    try {
        file.createNewFile();
        png.processOutput(new FileInputStream(file));
    } catch (FileNotFoundException ex) {
        System.err.print(ex);
    } catch (IOException ex) {
        System.err.print(ex);
    }

    JavaPlot p = new JavaPlot();
    p.setTerminal(png);

    p.getAxis("x").setLabel("yield");
    p.getAxis("y").setLabel("biomass");
    p.getAxis("x").setBoundaries(0.0, 1.0);
    p.getAxis("y").setBoundaries(0.0, 1.0);
    p.addPlot(setDeleted);
    p.addPlot(setExist);
    p.setTitle("remaining EMs");
    p.plot();

    try {
        ImageIO.write(png.getImage(), "png", file);
    } catch (IOException ex) {
        System.err.print(ex);
    }
}

}

1 голос
/ 11 июля 2014

Стоит отметить, что в дополнение к коду, представленному christo, когда вы переключаете терминал javaplot, он блокирует и вызывает сбой потока, так как gnuplot ожидает, когда пользователь закроет его, что, поскольку он установленк объекту файла png, нет никакого способа сделать.Способ исправить это (по крайней мере, в Windows 7) состоит в том, чтобы установить для атрибута persist значение false, например, так:

p.setPersist(false);

Это будет гарантировать, что все идет хорошо и быстро и имеетнет проблемы.

...