Java – call ggplot. Java from rserve 1KB blank PNG image

See English answer > ggplot's qplot does not execute on sourcing 1

When this code is executed in the R console, a chart with two bars is presented directly Png (file = 'yash_gendervstotalaccountbalance. PNG', width = 400, height = 350, resolution = 72) ggplot (data = yashcustomesaccounts, AES (x = gen_desc, y = account_balance)) geom_ bar(stat =’identity’) dev.off()

But when I use rserve to call the same code from Java (involving the ggplot call), it creates a blank PNG The code is as follows

package RRnD;
import java.awt.*;
import org.rosuda.REngine.*;
import org.rosuda.REngine.Rserve.*;

public class PlottingGenderVsTotalAccountBalance {

    public static void main(String[] args) throws RserveException {
        try {
            RConnection c = new RConnection(); // make a new local connection on default port (6311)
            System.out.println("1. Connection created ----------------------------------------------------------------------");            
            System.out.println("Working directory = "+c.eval("getwd()").asString());
            System.out.println("2. Working dir read ----------------------------------------------------------------------");
            c.eval("YashCustomers <- read.csv('YashCustomer.csv',header=TRUE)");
            c.eval("YashAccounts <- read.csv('YashAccount.csv',header=TRUE)");
            c.eval("YashCustomersAccounts <- merge(YashCustomers,YashAccounts,by='CUSTOMER_ID')");
            System.out.println("3. Data.frames read ----------------------------------------------------------------------");

            c.eval("library(ggplot2)");
            c.eval("require(ggplot2)");
            System.out.println("4. ggplot2 loaded ----------------------------------------------------------------------");

            c.eval("png(file='Yash_GenderVsTotalAccountBalance.png',width=400,height=350,res=72)");
            c.parseAndEval("ggplot(data=YashCustomersAccounts,aes(x=GENDER_DESC,y=ACCOUNT_BALANCE)) + geom_bar(stat='identity');dev.off()");            
            System.out.println("5. plotting done ----------------------------------------------------------------------");

            REXP xp = c.parseAndEval("r=readBin('Yash_GenderVsTotalAccountBalance.png','raw',1024*1024)");
            c.parseAndEval("unlink('Yash_GenderVsTotalAccountBalance.jpg'); r");
            Image img = Toolkit.getDefaultToolkit().createImage(xp.asBytes());
            System.out.println("img = "+img);
            System.out.println("6. File reading done ----------------------------------------------------------------------");

            System.out.println("10. All done ----------------------------------------------------------------------");            
            c.close();
        } catch (REngineException ree) {
            System.out.println("REngineException ...");
            System.out.println(ree.getMessage());
        } catch (Exception e) {
            System.out.println("Exception ...");
            System.out.println(e.getMessage());
        }
    }

}

Note: – if I make a simple plot call like the following line, it works, not ggplot Png image created correctly c. Parseandeval ("graph (yashcustomers ['customer_id']; dev.off()") Instead of... C.parseandeval ("ggplot (data = yashcustomesaccounts, y = account_balance)) geom_bar (STAT = 'identity'); dev.off()");

Please help me find the problem Thank you very much – Yash

Solution

Automatically draw images in the console ggplot

c.parseAndEval("print(ggplot(data=YashCustomersAccounts,y=ACCOUNT_BALANCE)) + geom_bar(stat='identity'));dev.off()");
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>