Как включить сюжет в R Studio Presentations (Rpres)

Как включить сюжетный сюжет в файл Rpres? Если вы сделаете это как в обычном файле Rmd

Basic Plot
========================================================
```{r, echo=FALSE}
library(plotly)
plot_ly(economics, x = date, y = unemploy / pop)
```

Результат выглядит следующим образом: Ошибка в файле (con, " rb

Решение, с которым я столкнулся, использует возможность того, что Markdown может содержать HTML:

Basic Plot
========================================================
```{r, results='hide', echo=FALSE}
library(plotly)
p = plot_ly(economics, x = date, y = unemploy / pop)
htmlwidgets::saveWidget(as.widget(p), file = "demo.html")
```
<iframe src="demo.html" style="position:absolute;height:100%;width:100%"></iframe>

Но я надеюсь на более элегантное решение, которое не использует никаких дополнительных файлов.

Ответ 1

Ниже приведен минимальный пример того, как включить графику plot_ly в представление ioslides, поэтому он не совсем отвечает на вопрос Rpres, но предоставляет альтернативу.

Первый слайд отображает график, преобразованный из ggplot в plot_ly, сохраняя стиль ggplot. Второй слайд отображает график, используя plot_ly напрямую.

---
title: "Plot_ly demo"
date: "8 December 2016"
output: ioslides_presentation
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## A simple plot_ly

```{r, fig.align='center', message = FALSE}
library(plotly)

df <- data.frame(x =  1:10, y = (1:10)^2)

p <- ggplot(df, aes(x = x, y = y)) + geom_line() + labs(x = "X", y = "Y", title = "X and Y")

ggplotly(p)
```

## Another simple plot_ly

```{r, echo = FALSE, fig.align = 'center', message = FALSE}
plot_ly(df, x = x, y = y)
```

Ответ 2

Была такая же проблема. Когда я выполнил slidify(index.Rmd), появилось сообщение о том, что PhantomJS not found, и предложении запустить webshot::install_phantomjs(). Так я и сделал, и ошибка исчезла. Однако я до сих пор не получил сюжетно-интерактивной карты. Это было пустым.

Также попробовал следующий код в терминале, который работал для некоторых людей, но не для меня. Я получил вывод html файла, и там до сих пор не было карты. Это из этого поста. Это может сработать для вас.

Rscript -e "library(knitr); library(rmarkdown); 
rmarkdown::render('index.Rmd', output_file='index.html')"

Я уверен, что это заговор. Потому что ggplots работает нормально.

Обновить:

Переустановил/обновил пакет wetshot, запустив install.packages("webshot"), затем снова запустил webshot::install_phantomjs(), затем library(knitr); library(rmarkdown); rmarkdown::render('index.Rmd', output_file='index.html') library(knitr); library(rmarkdown); rmarkdown::render('index.Rmd', output_file='index.html') library(knitr); library(rmarkdown); rmarkdown::render('index.Rmd', output_file='index.html'). Это сработало. HTML файл имеет графическую карту, хотя он не отображается в окне предварительного просмотра Knitr.

Обновить:

Добавив следующий код, я могу отобразить карту по сторонам. Обратитесь к этому сообщению.

htmlwidgets::saveWidget(as_widget(p), "p.html")
cat('<iframe src="./p.html" width=100% height=100% allowtransparency="true"> </iframe>')

Полный контекст будет что-то перечислено ниже.

library(plotly)
cities <- readRDS("D:/R/data/cn_cities.rds")
cities <- cities[1:50,]

geo <- list(
  scope = 'asia',
  projection = list(type = 'Mercator'),
  showland = TRUE,
  landcolor = toRGB("gray85"),
  countrycolor = toRGB("white"),
  subunitcolor = toRGB("white"),
  countrywidth = 1,
  subunitwidth = 1)

p <- plot_geo(cities, 
              locationmode='CHN', 
              sizes=c(1, 200)) %>% 
     add_markers(x=~lng, y=~lat, 
                 size=~sqrt(population),
                 hoverinfo="text", 
                 text=~paste(city, "<br />", population)) %>%
     layout(title='', 
            geo=geo)

htmlwidgets::saveWidget(as_widget(p), "p.html")
cat('<iframe src="./p.html" width=100% height=100% allowtransparency="true"> </iframe>')