Java调用R ,从数据库读取数据,用R根据读取的数据生成图片保存

Java调用R 以及用R生成的图片保存
使用 png()可以保证图片质量

有人说绘制的图片上有中文会出现乱码,其实设置下字体就好了

family=‘STXihei’


Java调用R 以及用R生成的图片保存

Rserve的配置和启动:

①安装Rserve包。通过R命令行:install.packages(“Rserve”);

②在R命令行输入:library(Rserve),加载Rserve;

然后输入Rserve(),启动服务。

Java调用R:

下载Rserve提供的jar包(http://www.rforge.net/Rserve/files/)下载REngine.jarRserveEngine.jar。然后导入java项目。

maven项目,坐标为:

<dependency>
    <groupId>org.rosuda.REngine</groupId>
    <artifactId>REngine</artifactId>
</dependency>
<dependency>
    <groupId>org.rosuda.REngine</groupId>
    <artifactId>Rserve</artifactId>
</dependency>

Java代码

/**
 * 从数据库中查找25组打击-警情的数据,绘制线性关系图
 * @param args
 */
public static void main(String[] args) {
        String host = "127.0.0.1";
        int port = 6311;
        String db_name = "mytest";
        String db_user = "sa";
        String db_pwd = "1234qwer!";
        try {
            //连接 R
            RConnection connection = new RConnection(host, port);
            connection.setStringEncoding("utf8");
            //加载包,创建连接
            connection.eval("library(RODBC)");
            connection.eval("conn <- odbcConnect(\"" + db_name + "\",uid=\"" + db_user + "\",pwd=\"" + db_pwd + "\")");
            //从数据库查询数据
            connection.eval("base <- sqlQuery(conn,\"SELECT u.*, cc.field11 as djzs, " +
                    "pc.field11 as 'jqzs' " +
                    "FROM unit u LEFT JOIN population_v2 p ON p.field2 = u.code LEFT JOIN police_forces_v2 pf ON pf.field2 = u.code " +
                    "LEFT JOIN police_case_v2 pc ON pc.field2 = u.code " +
                    "LEFT JOIN combat_crime_v2 cc ON cc.field2 = u.code where p.year = '2017' and pf.year = '2017' and pc.year = '2017' and cc.year = '2017' ORDER BY u.code\")");
            //生成线性图片的存储路径
            connection.eval("png('/Users/ianly/Desktop/test.png',width=600*3,height=3*600,res=72*3))");
            // 绘图,散列点
            connection.eval("plot(base$jqzs,base$djzs,xlab='警情',ylab='打击',main='打击-警情关系图',family='STXihei')");
            // 绘图 ,线性直线
            connection.eval("abline(lm(base$djzs~base$jqzs),col='red')");
            //本单位散点特殊标色
            connection.eval("index <- which(base$name == '虹桥所')");
            connection.eval("current_dj_point_x <- base$jqzs[index]");
            connection.eval("current_dj_point_y <- base$djzs[index]");
            connection.eval("points(current_dj_point_x, current_dj_point_y, pch=19, col='red', cex=2)");
            //关闭设备 生成图片
            connection.eval("dev.off()");
            //记得关闭连接,否则内存的资源不被释放,会引起进程冲突
            connection.close();
        } catch (RserveException e) {
            e.printStackTrace();
        }
    }

family=‘STXihei’
这个是设置中文乱码的

最后在桌面生成test.jpg的图片
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值