2016-11-11 6 views
1

Я начинаю играть с plot.ly в R, и я поражаюсь возможностью публиковать свои графики непосредственно в html, используя htmlwidgets. До сих пор я не могу сохранить несколько виджетов в том же html. Я сохранил несколько виджетов в автономных HTMLs и чем сочетать его вручную в HTML коде, но я хотел бы быть в состоянии сделать это в R.Использование R и plot.ly, как сохранить кратные htmlwidgets в моем html?

Простой пример:

#graph 
graph<- ggplot(df, aes(x = Data, y=tax))+ geom_bar(stat='identity') 
gg <- ggplotly(graph) 

# save as HtmlWigdet 
htmlwidgets::saveWidget(as.widget(gg), "Index.html") 

Как я могу анализировать несколько объектов ggplotly для saveWidgets?

(Это мой первый вопрос здесь в StackOverflow, надеюсь, что я сделал это правильно! С уважением!)

ответ

0

Какая польза случая вы после? Возможно, вы захотите добавить эти графики в Flexdashboard (который создается в R Markdown). Это был мой недавний переход, в сочетании с Plotly.

+0

Это то, что мне было нужно, чтобы произвести и воспроизвести веб-страницу с несколькими графиками на R. Спасибо Стив! –

0

Это функция, которую я адаптировал из бит и частей пакета htmltools, чтобы сохранить список тегов, а затем вернуть тег iframe. Вы можете обернуть несколько htmlwidgets с помощью htmltools::tagList, а затем использовать эту функцию для сохранения целой группы.

save_tags <- function (tags, file, selfcontained = F, libdir = "./lib") 
{ 
    if (is.null(libdir)) { 
    libdir <- paste(tools::file_path_sans_ext(basename(file)), 
        "_files", sep = "") 
    } 
    htmltools::save_html(tags, file = file, libdir = libdir) 
    if (selfcontained) { 
    if (!htmlwidgets:::pandoc_available()) { 
     stop("Saving a widget with selfcontained = TRUE requires pandoc. For details see:\n", 
      "https://github.com/rstudio/rmarkdown/blob/master/PANDOC.md") 
    } 
    htmlwidgets:::pandoc_self_contained_html(file, file) 
    unlink(libdir, recursive = TRUE) 
    } 
    return(htmltools::tags$iframe(src= file, height = "400px", width = "100%", style="border:0;")) 
}