从R markdown旋转表格pdf

v9tzhpje  于 2023-05-04  发布在  其他
关注(0)|答案(4)|浏览(153)

我用R Markdown写,有一个很宽的列联表。我正在使用pandoc将R markdown文档转换为PDF。
可以旋转或缩小table吗?理想情况下,这将在不必切换到LaTeX格式的情况下完成。

我的尝试:

我一直在滥用knitr中的figure选项来尝试这一点,但无论我使用kable还是xtable,我都没有任何运气。我尝试过的一些排列包括:

```{r out.extra='angle=90', results='asis'}
library(knitr)
kable(iris[1:5,])

``{r size='footnotesize', results='asis'}
library(knitr)
kable(iris[1:5,])


```{r out.extra='angle=90', results='asis'}
library(xtable)
xtable(iris[1:5,])
library(xtable)
xtable(iris[1:5,])

所有这些都可以很好地显示表,但不能旋转它。
我用来编织的代码是:

Rscript -e "library(knitr); knit('table.Rmd', 'table.md')"


并转换为PDF:

pandoc table.md -o table.pdf

a11xaf1n

a11xaf1n1#

out.extra='angle=90'只适用于Figures,不幸的是不适用于表。以下是几种可能的方法:

KableExtra(旋转页面)

您可以使用有用的插件包kableExtra轻松地旋转table。具体来说,landscape()函数将把表格放在一个横向页面上。对于不能在纵向页面上打印的宽表格,它很有用。

library(kableExtra)

kable(iris[1:5,],
      format = "latex", booktabs = TRUE) %>%
  kableExtra::landscape()

这些函数的局限性在于它确实会强制创建一个新页面,因此根据表的大小,它可能会留下一些空白空间。

KableExtra(缩放宽度)

您可以使用函数kable_styling(latex_options = "scale_down")缩放表格的宽度。这将强制表格与页面的宽度一致。

kable(iris[1:5,],
          format = "latex", booktabs = TRUE) %>%
          kable_styling(latex_options = "scale_down")

有关kableExtra软件包的更多示例,请在此处查看该软件包:https://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf

Stargazer(旋转桌)

其他选项也可用,但这些都需要安装额外的LaTeX软件包。例如,stargazer包可以使用float.env参数横向打印表格:

```{r, results="asis"}
stargazer(iris[1:5,], 
          float.env = "sidewaystable")

这需要LaTeX前导码中的`\usepackage{dcolumn}`
阅读更多关于定制您的LaTex序言在这里:[https://tex.stackexchange.com/questions/171711/how-to-include-latex-package-in-r-markdown](https://tex.stackexchange.com/questions/171711/how-to-include-latex-package-in-r-markdown)
hgc7kmma

hgc7kmma2#

您可以在Rmd文件中添加一些LATEX代码:

\usepackage{lscape}
\usepackage{pdfpages}

Some text on a portrait page.

\newpage
\blandscape

## Title, lorem ipsum

```{r, results = "asis"}
kable(iris[1:5,], caption = "Lorem again")

Lorem ipsum...

\elandscape

Some other text on a portrait page.

uxhixvfz

uxhixvfz3#

你能用t()吗?

library(xtable)
xtable(t(iris[1:5,]))

如果你的表仍然很长,把它分成多个表。例如:

splits = floor(seq(1, ncol(iris), length=5))
for(i in 2:length(splits)){
 mini.tab = iris[ , splits[i-1]:splits[i]]
 xtable(mini.tab)
}
dwthyt8l

dwthyt8l4#

如果你想让标题和表格在同一页上,还有两个解决方案可以使用kable和kableExtra:

  1. Posted by user 16024709 in this question从Markdown输出Rotate table pdf(包括for循环):
---
output: pdf_document
header-includes:
  \usepackage{lscape}
  \usepackage{pdfpages}
  \usepackage{graphicx}
  \usepackage[figuresright]{rotating}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

Report page -

library(knitr)
library(kableExtra)
for (i in 1:3) {
  cat('\\rotatebox{90}{')
  print(kable(iris[i:(i+5), ], format = "latex", align = "c", booktabs = TRUE,
          row.names = FALSE))
  cat('}')
  cat("\n\\newpage\n")
}

1.基于第一个解决方案,但由我调整,以使用kable_styling。您必须添加'position=“left”'。否则你会得到一个“!LaTeX错误:不在外部par模式下。“也没有for循环包含在其中。

output: pdf_document
header-includes:
\usepackage{lscape}
\usepackage{pdfpages}
\usepackage{graphicx}
\usepackage[figuresright]{rotating}

knitr::opts_chunk$set(echo = FALSE)
library(kableExtra)
table <- kable(iris[1:5, ], format = "latex", align = "c", booktabs = TRUE, row.names = FALSE)
table <- kable_styling(table, latex_options = c("striped"), position="left", font_size=7, stripe_color="#D3D3D3")

Some Title

library(knitr)

cat('\\rotatebox{90}{')
print(table)
cat('}')
cat("\n\\newpage\n")

相关问题