首页 > 解决方案 > 如何将 Rmd 中的迷你图制作为 pdf?

问题描述

在我的 Rmd 到 pdf 中,我想在表格中有迷你图。有关在 Rmd 到 html 中工作的示例,请查看https://stackoverflow.com/a/54578219/6170807。kableExtra 中的内置直方图和箱线图在 Rmd 到 pdf 中工作正常,但我想要一个折线图,而不是直方图或箱线图。有人建议吗?谢谢!

标签: rr-markdownkableextrasparklines

解决方案


这是一个基本的例子。我们只需为每一行/组创建一个图并保存它。在表格中,我们将乳胶代码添加到相应的图中。如何设置图形的样式和格式取决于您。您可以查看 kableExtra 的源代码以了解如何实现直方图和箱线图。

另一种选择是使用浏览器pagedown呈现分页 HTML 报告并使用或手动打印它们。pagedown::chrome_print这样您就可以使用 HTML 迷你图方法。

---
output: pdf_document
---

```{r, include=F}
library(tidyverse)
library(ggplot2)
library(tidyr)
library(scales)

df <- data.frame(Country = rep(c("A", "B", "C"), 5), 
                 Year = c(rep(2000, 3), rep(2001, 3), rep(2002, 3), rep(2003, 3), rep(2004, 3)),
                 Value = sample(1000:2000, size = 15))



df %>%
  group_by(Country) %>%
  do({
    p <- ggplot(., aes(x = Year, y = Value)) + 
      geom_line(size = 5, color = ifelse(tail(.$Value, n = 1) < head(.$Value, n = 1), "firebrick3", "springgreen")) + 
      geom_line(size = 2.5, color = ifelse(tail(.$Value, n = 1) < head(.$Value, n = 1), "firebrick", "springgreen3")) + 
      theme_void()
    ggsave(p, filename = paste0("fig", unique(.$Country), ".pdf"), width = 4, height = 1.25)
    invisible(.)
  })


df <- df %>%
  pivot_wider(names_from = Year, values_from = Value) %>%
  mutate(Sparkline = paste0("\\raisebox{-.5\\height}{\\includegraphics[width=2cm]{fig", Country, ".pdf}}"))
```

```{r, echo  = F}
knitr::kable(df, escape = F)
```

在此处输入图像描述


推荐阅读