R highcharter从保存为html的图中获取数据

时间:2017-09-06 08:03:21

标签: html r highcharts

我在R中用highcharter包绘制数据,并将它们保存为html以保持交互功能。在大多数情况下,我会绘制多个图形,因此将它们作为画布组合在一起。

require(highcharter)
hc_list <- lapply(list(sin,cos,tan,tanh),mapply,seq(1,5,by = 0.1)) %>% 
  lapply(function(x) highchart() %>% hc_add_series(x))
hc_grid <- hw_grid(hc_list,ncol = 2)

htmltools::browsable(hc_grid) # print
htmltools::save_html(hc_grid,"test_grid.html") # save

enter image description here

我想从过去保存为html的图中提取数据,就像这些一样。通常我会做hc_list [[1]] $ x $ hc_opts $ series,但是当我将html导入R并尝试做同样的事情时,我收到一个错误。它不会做这项工作。

> hc_imported <- htmltools::includeHTML("test_grid.html")
> hc_imported[[1]]$x$hc_opts$series
Error in hc_imported$x : $ operator is invalid for atomic vectors

如果我能写一个像

这样的函数
get_my_data(my_imported_highcharter,3) # get data from 3rd plot

这将是最好的。问候。

1 个答案:

答案 0 :(得分:2)

您可以使用以下代码

require(highcharter)
hc_list <- lapply(list(sin,cos,tan,tanh),mapply,seq(1,5,by = 0.1)) %>% 
  lapply(function(x) highchart() %>% hc_add_series(x))
hc_grid <- hw_grid(hc_list,ncol = 2)

htmltools::browsable(hc_grid) # print
htmltools::save_html(hc_grid,"test_grid.html") # save

# hc_imported <- htmltools::includeHTML("test_grid.html")
# hc_imported[[1]]$x$hc_opts$series

library(jsonlite)
library(RCurl)
library(XML)

get_my_data<-function(my_imported_highcharter,n){
  webpage <- readLines(my_imported_highcharter)
  pagetree <- htmlTreeParse(webpage, error=function(...){})

  body <- pagetree$children$html$children$body 

  divbodyContent <- body$children$div$children[[n]]

  script<-divbodyContent$children[[2]]

  data<-as.character(script$children[[1]])[6]

  data<-fromJSON(data,simplifyVector = FALSE)

  data<-data$x$hc_opts$series[[1]]$data

  return(data)
}     

get_my_data("test_grid.html",3)


get_my_data("test_grid.html",1)