簡體   English   中英

在 RMarkdown 中的 HTML 模板中渲染 ggplot2 圖

[英]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>

但是我不想在每次使用具有不同xy特定 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)
```

這是比較兩者的屏幕截圖。

html渲染的區別

所以這是一個糟糕的解決方案。

```{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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM