R中的Plotly-Generate JSON,保存并在html / javascript中重复使用

问题描述 投票:2回答:1

这里有一个简单的示例:

  1. 从R绘图中导出绘图json文件
  2. 保存此文件
  3. 重新使用此文件以使用plotly.js库在网页中生成图

我已经为绘图(p1)生成了一个json文件:

json<-plotly_json(p1,FALSE)
write(json,'test.json')

但是我无法通过简单的html / java脚本测试生成图。我已经能够在html / javascipt中生成图,而不仅仅是从R中保存的json文件中生成图。这看起来很简单,但是我是html的新手,并且显然缺少明显的东西。

javascript json r plotly
1个回答
0
投票

我想我终于有了OP,并且我正在寻找。

以下功能输出两个文件。

  1. 包含Plotly所需内容的Javascript文件
  2. 带有可选代码的可选HTML文件,用于绘制绘图。
rm(list = ls())


library(tidyverse)
library(stringi)
library(plotly)


plotly_to_js <- function(

  plotly.object
  , div.id = 'plot1'
  , output.file = 'plot1.js'
  , output.html = FALSE
  , js.filename = getwd() %s+% '/' %s+% output.file
  , output.url = div.id %s+% '.html'

){

  json <- plotly_json(plotly.object,FALSE)

  js.output <-
    "(function(){ \n
        window.PLOTLYENV={'BASE_URL': 'https://plotly.com'}; \n
        \n
        var gd = document.getElementById('%div.id%') \n
        var resizeDebounce = null; \n

        function resizePlot() { \n
          var bb = gd.getBoundingClientRect(); \n
          Plotly.relayout(gd, { \n
            width: bb.width, \n
              height: bb.height \n
            }); \n
          } \n

          Plotly.plot(gd,  \n
              %json%
           \n
                  ); \n
           }()); \n
  "

  js.output <- gsub('%div.id%', div.id, js.output)
  js.output <- gsub('%json%', json, js.output)

  fileConn<-file(js.filename)
    writeLines(js.output, fileConn)
  close(fileConn)

  if(output.html){

    output.html <-
      "<html> \n
        <head> \n
            <meta charset=\"utf-8\"/> \n
        </head> \n

        <body> \n
        \n
          <script src='https://cdn.plot.ly/plotly-latest.min.js'></script> \n
        \n
        <div id=\"%div.id%\" style=\"width: 100%; height: 100%;\" class=\"plotly-graph-div\"></div> \n
        <script type=\"text/javascript\" src=\"%js.filename%\"></script> \n

        </body>\n
        </html>\n"

    output.html <- gsub('%div.id%', div.id, output.html)
    output.html <- gsub('%js.filename%', js.filename, output.html)

    fileConn <- file(output.url)
      writeLines(output.html, fileConn)
    close(fileConn)

  }

}



x <- c(1:100)
random_y <- rnorm(100, mean = 0)
data <- data.frame(x, random_y)

fig <- plot_ly(data, x = ~x, y = ~random_y, type = 'scatter', mode = 'lines')

plotly_to_js (
  fig
  , output.html = TRUE
)

© www.soinside.com 2019 - 2024. All rights reserved.