使用 opencpu 显示一个 visNetwork 对象
display a visNetwork object with opencpu
我正在尝试将从函数返回的 visNetwork 对象嵌入到 html div 中,但到目前为止我没有成功。
假设有一个 returns visNetwork 对象的 R 函数。最简单的形式可能如下所示:
get_plot <-function()
{
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
visNetwork::visNetwork(nodes, edges, width = "100%")
}
我尝试用两种不同的方法检索情节。
使用opencpu
的rplot()
方法:
var req = $("#plot-div").rplot("get_plot",{});
其中 returns
ocpu/tmp/x09f8951024d611/graphics/last/png?width=100&height=100 404 (Not Found)
确实没有出现 /grraphics 目录。
使用opencpu常用的ocpu.call()
方法看看能得到什么作为响应
var req = ocpu.call("get_plot",{},
function (session8){
session8.getObject( function(data){
console.log(data);
})
})
这个回来了
ocpu/tmp/x0dabe1f8c83093/R/.val/json 400 (Bad Request)
在访问 link 时,我看到一条错误消息,通知我 No method asJSON S3 class: htmlwidget
。
有人使用 openCPU
检索 visNetwork
对象并将其嵌入 html 页面吗?这可能吗?
根本的问题是如何将 htmlwidgets
与 opencpu
结合使用。为此存在一个示例应用程序:https://github.com/rwebapps/leafletapp。我用两个文件扩展了这个包,主要是使用现有包中的复制和粘贴.. R 函数:
#' @export
get_plot <- function() {
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
n <- visNetwork::visNetwork(nodes, edges, width = "100%")
htmlwidgets::saveWidget(n, "mynet.html", selfcontained = FALSE)
}
HTML 页数:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Example map</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="app.css">
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="opencpu-0.5.js"></script>
<script>
$(function(){
$("#netsubmit").click(function(e){
e.preventDefault();
var btn = $(this).attr("disabled", "disabled");
var req = ocpu.call("get_plot", {}, function(session){
$("iframe").attr('src', session.getFileURL("mynet.html"));
}).fail(function(text){
alert("Error: " + req.responseText);
}).always(function(){
btn.removeAttr("disabled");
});
});
});
</script>
</head>
<body>
<div class="container">
<div class="col-sm-3">
<form>
<button type="submit" id="netsubmit" class="btn btn-default">Update Network!</button>
</form>
</div>
</div>
<iframe src="about:blank"></iframe>
</body>
</html>
基本思路是将 htmlwidget
保存到服务器上的 HTML 页面,并在 iframe
中显示该页面。
我正在尝试将从函数返回的 visNetwork 对象嵌入到 html div 中,但到目前为止我没有成功。
假设有一个 returns visNetwork 对象的 R 函数。最简单的形式可能如下所示:
get_plot <-function()
{
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
visNetwork::visNetwork(nodes, edges, width = "100%")
}
我尝试用两种不同的方法检索情节。
使用
opencpu
的rplot()
方法:var req = $("#plot-div").rplot("get_plot",{});
其中 returns
ocpu/tmp/x09f8951024d611/graphics/last/png?width=100&height=100 404 (Not Found)
确实没有出现 /grraphics 目录。
使用opencpu常用的
ocpu.call()
方法看看能得到什么作为响应var req = ocpu.call("get_plot",{}, function (session8){ session8.getObject( function(data){ console.log(data); }) })
这个回来了
ocpu/tmp/x0dabe1f8c83093/R/.val/json 400 (Bad Request)
在访问 link 时,我看到一条错误消息,通知我 No method asJSON S3 class: htmlwidget
。
有人使用 openCPU
检索 visNetwork
对象并将其嵌入 html 页面吗?这可能吗?
根本的问题是如何将 htmlwidgets
与 opencpu
结合使用。为此存在一个示例应用程序:https://github.com/rwebapps/leafletapp。我用两个文件扩展了这个包,主要是使用现有包中的复制和粘贴.. R 函数:
#' @export
get_plot <- function() {
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
n <- visNetwork::visNetwork(nodes, edges, width = "100%")
htmlwidgets::saveWidget(n, "mynet.html", selfcontained = FALSE)
}
HTML 页数:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Example map</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="app.css">
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="opencpu-0.5.js"></script>
<script>
$(function(){
$("#netsubmit").click(function(e){
e.preventDefault();
var btn = $(this).attr("disabled", "disabled");
var req = ocpu.call("get_plot", {}, function(session){
$("iframe").attr('src', session.getFileURL("mynet.html"));
}).fail(function(text){
alert("Error: " + req.responseText);
}).always(function(){
btn.removeAttr("disabled");
});
});
});
</script>
</head>
<body>
<div class="container">
<div class="col-sm-3">
<form>
<button type="submit" id="netsubmit" class="btn btn-default">Update Network!</button>
</form>
</div>
</div>
<iframe src="about:blank"></iframe>
</body>
</html>
基本思路是将 htmlwidget
保存到服务器上的 HTML 页面,并在 iframe
中显示该页面。