加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 从Rserve调用ggplot. 1KB的空白png图像

发布时间:2020-12-14 19:35:22 所属栏目:Java 来源:网络整理
导读:参见英文答案 ggplot’s qplot does not execute on sourcing1个 我最近一直在使用r,rserve和ggplot. 在R控制台中执行此代码时,会直接呈现带有两个条形的图表. PNG(文件= ‘Yash_GenderVsTotalAccountBalance.png’,宽度= 400,高度= 350,解析度= 72) ggplot(
参见英文答案 > ggplot’s qplot does not execute on sourcing1个
我最近一直在使用r,rserve和ggplot.

在R控制台中执行此代码时,会直接呈现带有两个条形的图表.
PNG(文件= ‘Yash_GenderVsTotalAccountBalance.png’,宽度= 400,高度= 350,解析度= 72)
ggplot(data = YashCustomersAccounts,aes(x = GENDER_DESC,y = ACCOUNT_BALANCE))geom_bar(stat =’identity’)
dev.off()

但是当我使用Rserve从JAVA调用相同的代码(涉及ggplot调用)时,它会创建一个空白的png.
代码如下.

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());
        }
    }

}

注意: – 如果我像下面一行做一个简单的情节调用,它可以正常工作,而不是ggplot调用. png图像正确创建.
c.parseAndEval( “图(YashCustomers [ ‘CUSTOMER_ID’]); dev.off()”); …而不是… c.parseAndEval(“ggplot(data = YashCustomersAccounts,y = ACCOUNT_BALANCE))geom_bar(stat =’identity’); dev.off()”);

请帮助我找到问题.
非常感谢,
–Yash

解决方法

在控制台ggplot中自动绘制图像.
但是在从Rserver调用ggplot绘图时,我们需要明确地打印图像.
c.parseAndEval("print(ggplot(data=YashCustomersAccounts,y=ACCOUNT_BALANCE)) + geom_bar(stat='identity'));dev.off()");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读