I tried to plot series of interactive ggplotly
graphs from inside for
loop in R markdown (.Rmd
) file. Contents of my .Rmd
file:
---
title: "Untitled"
output: html_document
---
```{r}
library(ggplot2) # for plots
library(plotly) # for interactive plots
# Convert 4 variables to factor variables:
factor_vars <- c("vs", "am", "gear", "carb")
mtcars[factor_vars] <- data.frame(Map(as.factor, mtcars[factor_vars]))
for (VAR in factor_vars) {
cat(paste("Factor variable:", VAR))
# Contents of "VAR" changes inside the loop
p <- ggplot(mtcars, aes_string(x = "mpg", y = "wt", color = VAR)) + geom_point()
# Print an interactive plot
print(ggplotly(p))
}
```
I push Knit HTML
button in RStudio
. Unfortunately, none of interactive plots appear in the .html
file.
Question: why the graphs aren't plotted? And how can I create interactive plot in combination with for
loop in Rmd
file?
p.s. If I use print(p)
instead of print(ggplotly(p))
, ggplot2
plots appear in resulting .html
file.
If you are creating R charts in an RMarkdown environment with HTML output (such as RStudio), simply printing a graph you created using the plotly R package in a code chunk will result in an interactive HTML graph in the viewer.
You can embed an R code chunk like this: ```{r} summary(cars) ``` You can also embed plots, for example: ```{r, echo=FALSE} plot(cars) ``` Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
In terms of speed, ggplot2 tends to run much slower than Plotly. With regard to integration, both Plotly and ggplot2 can integrate with a variety of tools, like Python, MATLAB, Jupyter, and React. Both Plotly and ggplot2 are good options for both large and small businesses.
Based on this github issue, you should be able to do something like this:
---
title: "Untitled"
output: html_document
---
```{r, message = F}
library(ggplot2) # for plots
library(plotly) # for interactive plots
# Convert 4 variables to factor variables:
factor_vars <- c("vs", "am", "gear", "carb")
mtcars[factor_vars] <- data.frame(Map(as.factor, mtcars[factor_vars]))
plt <- htmltools::tagList()
i <- 1
for (VAR in factor_vars) {
# Contents of "VAR" changes inside the loop
p <- ggplot(mtcars, aes_string(x = "mpg", y = "wt", color = VAR)) +
geom_point() +
ggtitle(paste("Factor variable:", VAR))
# Print an interactive plot
# Add to list
plt[[i]] <- as.widget(ggplotly(p))
i <- i + 1
}
```
```{r, echo = F}
plt
```
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With