Как создать графики в R, используя JRI

По сути, это обратный вопрос: как построить график с использованием R, Java и JRI?, Я хочу создать сюжет в R из Java-программы и сохранить его на жестком диске. Речь не идет об отображении графика R в окне Java. Я использую JRE как часть пакета rJava. Выполнение расчетов в R из Java работает просто отлично.

Выполнение этого в R дает хороший сюжет:

pdf(file="qqplot.pdf")
x <- rnorm(100)
qqnorm(x); qqline(x)
dev.off()

Тем не менее, выполнение того же самого из Java производит тот же файл, но он пуст. Вот код Java:

private String createNormQQPlot(double[] samples, File filename){

    try{
        // Pass array to R
        engine.assign("samples", samples);
        engine.eval(String.format("pdf(file='%s')",filename.getPath()));
        engine.eval("qqnorm(samples)");
        engine.eval("qqline(samples)");
        engine.eval("dev.off()");
    }catch(Exception e) {
        e.printStackTrace();
        return "";
    }
    return filename.getPath();
}

Любые идеи по этому вопросу высоко ценятся!

1 ответ

Если вы используете какой-либо вариант Linux (например, Ubuntu), решение заключается в использовании cairo_pdf вместо pdf:

cairo_pdf(file="qqplot.pdf")
x <- rnorm(100)
qqnorm(x); qqline(x)
dev.off()

Есть недостатки этого подхода, документированные здесь: R: SVG, основанные на Cairographics графические устройства PDF и PostScript, но по крайней мере создаются непустые файлы PDF.

Другие вопросы по тегам