[英]Render ggplot2 plot in HTML template within RMarkdown
我在 rmarkdown 中構建了一個函數來生成一些具有給定值的 HTML 輸出,但是如果傳遞的值之一引用了 ggplot 對象,我希望它可以工作。
基本上,knitr 完美地呈現了這一點:
x <- [R computation]
y <- [ggplot figure]
<div id="some_number">`r x`</div>
<div id="some_figure">
```{r}
y
```
</div>
但是我不想在每次使用具有不同x
和y
特定 html 塊時都必須重寫它。 所以我寫了以下函數:
html_func <- function(x,y) {
template <- "
<div id=\"some_num\">{x}</div>
<div id=\"some_fig\">{y}</div>
"
instance <- glue::glue(template)
output <- knitr::asis_output(instance)
return(output)
}
number <- [R computation]
figure <- [ggplot figure]
html_func(number, figure)
呈現的頁面顯示在 div 中正確計算的“數字”,但不呈現繪圖。
如何讓它在 HTML 容器中生成繪圖?
更新:評論者建議使用實時數據,所以我們開始吧。
這有效:
```{r}
library(ggplot2)
data(mtcars)
number <- mean(mtcars$mpg)
figure <- ggplot2::ggplot(mtcars, aes(x=hp, y=mpg)) +
geom_point()
```
<div id="some_number">`r number`</div>
<div id="some_figure">
```{r echo=FALSE}
figure
```
</div>
但這不是。 計算輸出正常,但繪圖未呈現。
```{r}
library(ggplot2)
data(mtcars)
number <- mean(mtcars$mpg)
figure <- ggplot2::ggplot(mtcars, aes(x=hp, y=mpg)) +
geom_point()
html_func <- function(x,y) {
template <- "
<div id=\"some_num\">{x}</div>
<div id=\"some_fig\">{y}</div>
"
instance <- glue::glue(template)
output <- knitr::asis_output(instance)
return(output)
}
html_func(number, figure)
```
這是比較兩者的屏幕截圖。
所以這是一個糟糕的解決方案。
```{r}
html_func_open <- function(x) {
template <- "
<div id=\"some_num\">{x}</div>
<div id=\"some_fig\">
"
instance <- glue::glue(template)
output <- knitr::asis_output(instance)
return(output)
}
html_func_close <- function() {
template <- "
</div>
"
instance <- glue::glue(template)
output <- knitr::asis_output(instance)
return(output)
}
html_func_open(number)
figure
html_func_close()
```
通過在 HTML 模板之外繪制繪圖,然后在第二個函數中關閉 HTML,我得到了我想要的輸出。 這允許圖形兩側的 HTML 像我想要的那樣復雜。 但這並不是一個理想的解決方案,因為每次我想添加一個新圖形時它都需要多行,這限制了我構建 HTML 容器的復雜性。
所以仍在尋找更好的解決方案,我可以將圖形傳遞給函數並使其正確呈現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.