首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用opencpu显示visNetwork对象

用opencpu显示visNetwork对象
EN

Stack Overflow用户
提问于 2018-08-20 10:19:11
回答 1查看 146关注 0票数 0

我正在尝试将函数返回的visNetwork对象嵌入到html中,但到目前为止我还没有成功。

假设有一个返回visNetwork对象的R函数。最简单的形式可能是:

代码语言:javascript
复制
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%")
}

我试图用两种不同的方法取回情节。

  1. 使用rplot()方法的opencpuvar req = $("#plot-div").rplot("get_plot",{});

回传

代码语言:javascript
复制
ocpu/tmp/x09f8951024d611/graphics/last/png?width=100&height=100 404 (Not Found)

实际上,没有提供任何/grraphics目录。

  1. 使用opencpu常用的ocpu.call()方法来查看它作为响应可以得到什么 var req = ocpu.call("get_plot",{}, function (session8){ session8.getObject( function(data){ console.log(data); }) })

这个回来了

代码语言:javascript
复制
ocpu/tmp/x0dabe1f8c83093/R/.val/json 400 (Bad Request)

当访问链接时,我看到了一个错误,通知我No method asJSON S3 class: htmlwidget

是否有人能够使用visNetwork检索openCPU对象并将其嵌入到html页面中?这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-20 13:00:06

根本的问题是如何将htmlwidgetsopencpu结合使用。这里有一个示例应用程序:https://github.com/rwebapps/leafletapp。我用两个文件扩展了这个包,主要是使用现有软件包中的复制和粘贴。R职能:

代码语言:javascript
复制
#' @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页面:

代码语言:javascript
复制
<!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中显示该页面。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51928628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档