将 kableExtra 表与 ggplot2 元素结合起来

dan*_*lga 6 r ggplot2 r-markdown kableextra kable

我有一个 ggplot2 元素和一个 KableExtra 表。是否可以将它们与 patchwork、cowplot 或任何其他包组合成一个对象,并将其打印在 rmarkdown 文档中?如果没有解决方案,是否有任何其他带有 html 或 Latex 设计的表格包,我可以用它来解决这个问题?

是否可以使用自定义块(https://bookdown.org/yihui/rmarkdown-cookbook/custom-blocks.html)将这些元素连接在一起?我尝试过但没有成功。

将表格作为 custom_annotation 添加到 ggplot 对我来说不起作用,因为我想将许多表格和绘图添加到同一元素。

> dt_example <- data.table(index = c('type', 'model', 'manufacturer', 'time', 'revolutions', 'element', 'fluid'), object = c('B12', 'Schullo', 'GM', '5 h', '54 k', 'XX', 'water'))
> dt_example
          index  object
1:         type     B12
2:        model Schullo
3: manufacturer      GM
4:         time     5 h
5:  revolutions    54 k
6:      element      XX
7:        fluid   water

kable_table <- dt_example %>% 
    kable(col.names = c('',''), format = 'html', table.attr = "style='width:30%;'") %>%
    kable_styling() %>%
    pack_rows('model', 1, 5, label_row_css = "background-color: #FBFBFB;") %>%
    pack_rows('column', 6, 6, label_row_css = "background-color: #FBFBFB;") %>%
    pack_rows('fluid', 7, 7, label_row_css = "background-color: #FBFBFB;")

kable_table
Run Code Online (Sandbox Code Playgroud)

这给了我下表:

kable_table_output

ggplot 元素:

ggplot_element <- ggplot(mtcars,aes(x=mpg)) + geom_histogram(binwidth=5)

ggplot_element
Run Code Online (Sandbox Code Playgroud)

及其输出:

ggplot2_输出

组合的期望输出应该是:

在此输入图像描述

Lim*_*mey 0

答案是肯定和否定。或许。

\n

我假设当您说“组合”时,您的意思是“并排显示”而不是“合并为单个 R 对象”。

\n

使用纯 Markdown,答案是否定的,如下所述 “Markdown\xe2\x80\x99s 格式化语法仅解决可以用纯文本传达的问题”。但是,正如您所暗示的,还有其他解决方案。原始 CSS 和 HTML 是两种。但 CSS(以及某种程度上的 HTML)解决方案既依赖于显示内容的浏览器,也依赖于提供内容的服务器。有些浏览器不支持某些 CSS 元素,有些服务器会限制您的操作。例如,来自GitHub 的内容:“HTML 已被清理,积极删除可能损害您和您的亲属\xe2\x80\x94 的内容,例如脚本标记、内联样式以及类或 id 属性”。

\n

话虽如此,

\n
---\ntitle: "Untitled"\noutput: html_document\n---\n\n```{r setup, include=FALSE}\nknitr::opts_chunk$set(echo = TRUE)\n```\n\n```{css, echo=FALSE}\n.rightColumn {display: inline-block; color: green;}\n.leftColumn {display: inline-block; color: red;}\n.columnContainer {\n   -webkit-column-count: 2; -moz-column-count: 2; column-count: 2; \n   -webkit-column-rule: 1px dotted #e0e0e0; -moz-column-rule: 1px dotted #e0e0e0; \n   column-rule: 1px dotted #e0e0e0;\n}\n```\n```{css, echo=FALSE}\n<div class="columnContainer">\n```\n```{r, echo=FALSE, class.output="leftColumn"}\nprint("Left column")\n```\n```{r, echo=FALSE, class.output="rightColumn"}\nprint("Right column")\n```\n```{css, echo=FALSE}\n</div>\n```\n
Run Code Online (Sandbox Code Playgroud)\n

为我产生以下输出:

\n

在此输入图像描述

\n

这表明你想要的原则上是可能的。不幸的是,Markdown 文档的 CSS 层次结构很复杂(对我来说 - 我不是专家),并且我无法通过kable两列中的输出和图像复制效果。

\n

替换print("Right column")mtcars %>% head()会产生所需的效果,但mtcars %>% kable()不会。我无法在图像方面取得任何进展。

\n

我希望这有帮助。也许其他人可以提供最终的细节。

\n