如何以编程方式在四开本中生成选项卡集面板?

Mic*_*Luu 11 r quarto

我在下面提供了一个可重现的小示例。我想为命名 list 中的每个 ggplot 对象在四开中生成选项卡plots。下面的四开文档将在其自己的二级标题中呈现图形,但不会按预期呈现在选项卡中。

---
title: "Untitled"
format: html
---

```{r}
library(tidyverse)

data <- iris %>% as_tibble()

plots <- data %>%
  group_nest(Species) %>% 
  deframe() %>% 
  map(., ~ {
    ggplot(.x, aes(x = Sepal.Length, y = Sepal.Width)) + 
      geom_point()
  })

```

# Iris Plots 

::: {.panel-tabset}
```{r}
#| column: screen
#| fig-width: 12
#| fig-height: 8
#| fig-align: center
#| results: asis

iwalk(plots, ~ {
  cat('## ', .y, '\n\n')
  
  print(.x)
  
  cat('\n\n')
  
})

```

:::
Run Code Online (Sandbox Code Playgroud)

当块选项(除 results:asis 之外的所有选项)被删除时,文档将按预期正确渲染选项卡内的绘图。

# Iris Plots 

::: {.panel-tabset}
```{r}
#| results: asis

iwalk(plots, ~ {
  cat('## ', .y, '\n\n')
  
  print(.x)
  
  cat('\n\n')
  
})

```

:::
Run Code Online (Sandbox Code Playgroud)

sha*_*fee 12

更新答案

现在,如果您想生成扩展屏幕整个宽度的选项卡集,请用.panel-tabsetdiv 包裹 div .column-screen

请注意,我们必须使用比div 更多的:for 。我们已经使用了三个for ,因此我们必须再使用四个 for来创建 div for 。.column-screen.panel-tabset:.panel-tabset:column-screen


---
title: "Panel tabs"
format: html
---

```{r}
library(tidyverse)

data <- iris %>% as_tibble()

plots <- data %>%
  group_nest(Species) %>% 
  deframe() %>% 
  map(., ~ {
    ggplot(.x, aes(x = Sepal.Length, y = Sepal.Width)) + 
      geom_point() +
      theme_bw(
        base_size = 18 # to increase the size of the plot elements
      )
  }) 

```

# Iris Plots 

:::: {.column-screen}
::: {.panel-tabset}
```{r}
#| results: asis
#| fig-width: 14
#| fig-height: 6

iwalk(plots, ~ {
  cat('## ', .y, '\n\n')
  
  print(.x)
  
  cat('\n\n')
  
})

```

:::
:::: 

Run Code Online (Sandbox Code Playgroud)

现在面板选项卡已扩展到屏幕宽度。

panel_tab_with_screen_width

base_size = 18另请注意,我在绘图主题中增加了绘图元素的大小(例如 axis.title、axis.text 等) 。


旧答案

如果您只是从块选项中删除column: screenand ,您的第一种方法就会起作用。fig-align: center

因为这两个块选项会阻止.panel-tabset正确创建用于渲染选项卡集的 div。

因此,在删除这两个块选项后,这将起作用(并且您不需要,fig-align: center因为选项卡集中的数字默认居中。


# Iris Plots 

::: {.panel-tabset}
```{r}
#| fig-width: 12
#| fig-height: 8
#| results: asis

iwalk(plots, ~ {
  cat('## ', .y, '\n\n')
  
  print(.x)
  
  cat('\n\n')
  
})

```
Run Code Online (Sandbox Code Playgroud)

  • [R 工作流程](https://hbiostat.org/rflow) 展示了如何使用一些函数来生成选项卡和其他 Quarto 元素。 (2认同)