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.jar和RserveEngine.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的图片