这里有一个简单的示例:
我已经为绘图(p1)生成了一个json文件:
json<-plotly_json(p1,FALSE)
write(json,'test.json')
但是我无法通过简单的html / java脚本测试生成图。我已经能够在html / javascipt中生成图,而不仅仅是从R中保存的json文件中生成图。这看起来很简单,但是我是html的新手,并且显然缺少明显的东西。
我想我终于有了OP,并且我正在寻找。
以下功能输出两个文件。
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
)