valores titulo tamaño tablas tabla poner pie filas espacio entre columnas columna centrar ancho r latex rstudio knitr

titulo - Ajusta automáticamente el ancho de la tabla LaTeX para que se ajuste a pdf usando knitr y Rstudio



tablas en latex multirow (8)

¿Qué hay de dividir automáticamente las tablas anchas en partes como en los viejos y viejos terminales VT100 de 80 caracteres? Esto suele ser una buena práctica para las tablas LaTex / docx / odt y se establece de forma predeterminada en pander :

> set.caption(''Hello Fisher!'') > pander(wide.df) --------------------------------------------------------- Sepal.Length Sepal.Width Petal.Length Petal.Width -------------- ------------- -------------- ------------- 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.9 1.7 0.4 4.6 3.4 1.4 0.3 5 3.4 1.5 0.2 4.4 2.9 1.4 0.2 4.9 3.1 1.5 0.1 --------------------------------------------------------- Table: Hello Fisher! (continued below) ----------------------------------------------------- Species Sepal.Length Sepal.Width Petal.Length --------- -------------- ------------- -------------- setosa 5.1 3.5 1.4 setosa 4.9 3 1.4 setosa 4.7 3.2 1.3 setosa 4.6 3.1 1.5 setosa 5 3.6 1.4 setosa 5.4 3.9 1.7 setosa 4.6 3.4 1.4 setosa 5 3.4 1.5 setosa 4.4 2.9 1.4 setosa 4.9 3.1 1.5 ----------------------------------------------------- Table: Table continues below ---------------------------------------------------- Petal.Width Species Sepal.Length Sepal.Width ------------- --------- -------------- ------------- 0.2 setosa 5.1 3.5 0.2 setosa 4.9 3 0.2 setosa 4.7 3.2 0.2 setosa 4.6 3.1 0.2 setosa 5 3.6 0.4 setosa 5.4 3.9 0.3 setosa 4.6 3.4 0.2 setosa 5 3.4 0.2 setosa 4.4 2.9 0.1 setosa 4.9 3.1 ---------------------------------------------------- Table: Table continues below -------------------------------------- Petal.Length Petal.Width Species -------------- ------------- --------- 1.4 0.2 setosa 1.4 0.2 setosa 1.3 0.2 setosa 1.5 0.2 setosa 1.4 0.2 setosa 1.7 0.4 setosa 1.4 0.3 setosa 1.5 0.2 setosa 1.4 0.2 setosa 1.5 0.1 setosa --------------------------------------

Consulte ?pandoc.table y table.split.table en ?panderOptions para obtener más detalles.

Usando Rstudio y knitr para producir tablas de látex en pdf, ¿cómo puedo hacer que las tablas anchas se ajusten a la página? Básicamente estoy buscando la forma de reducir las mesas.

Con las cifras, es realmente fácil en Knitr usando out.width =, pero con las tablas no parece que haya una manera de hacerlo.

¿Alguna sugerencia?

/documentclass{article} /begin{document}

Las siguientes tablas son demasiado anchas para caber el pdf. Espero que haya una forma sencilla de reducirlos para que encajen. En este ejemplo, he usado tablas generadas desde las funciones xtable (), stargazer () y latex ().

<<message=FALSE>>= library(xtable) library(stargazer) library(Hmisc) library(tables) wide.df <- cbind(iris[1:10,],iris[1:10,],iris[1:10,]) @ <<results=''asis''>>= xtable(wide.df) @ <<results=''asis''>>= stargazer(wide.df,summary=FALSE) @ <<results=''asis''>>= latex( tabular( Species ~ (Sepal.Length +Sepal.Length + Sepal.Width + Petal.Length + Petal.Width )*(mean + sd + mean + mean ) , data=iris) ) @ /end{document}

Siguiendo las sugerencias de Stat-R, he intentado usar Resizebox pero no puedo hacer que funcione:

/documentclass{article} /usepackage{graphicx} /begin{document}

He intentado usar Reshapebox pero no tengo ni idea de cómo hacer que funcione en Rstudio / knitr:

<<message=FALSE>>= library(xtable) wide.df <- cbind(iris[1:10,],iris[1:10,],iris[1:10,]) @ /resizebox{0.75/textwidth}{!}{% <<results=''asis''>>= xtable(wide.df) @ %} /end{document}

Me sale este error:

! File ended while scanning use of /Gscale@box@dd. sessioninfo() R version 3.0.0 (2013-04-03) Platform: i386-w64-mingw32/i386 (32-bit) locale: [1] LC_COLLATE=Danish_Denmark.1252 LC_CTYPE=Danish_Denmark.1252 LC_MONETARY=Danish_Denmark.1252 LC_NUMERIC=C [5] LC_TIME=Danish_Denmark.1252 attached base packages: [1] splines grid stats graphics grDevices utils datasets methods base other attached packages: [1] tables_0.7 Hmisc_3.10-1 survival_2.37-4 stargazer_3.0.1 pgirmess_1.5.7 splancs_2.01-32 spdep_0.5-56 coda_0.16-1 deldir_0.0-22 [10] maptools_0.8-23 foreign_0.8-53 MASS_7.3-26 Matrix_1.0-12 lattice_0.20-15 rgdal_0.8-9 sp_1.0-9 nlme_3.1-109 boot_1.3-9 [19] xtable_1.7-1 scales_0.2.3 plyr_1.8 reshape2_1.2.2 ggplot2_0.9.3.1 loaded via a namespace (and not attached): [1] cluster_1.14.4 colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3 evaluate_0.4.3 formatR_0.7 gtable_0.1.2 knitr_1.2 [9] labeling_0.1 LearnBayes_2.12 munsell_0.4 proto_0.3-10 RColorBrewer_1.0-5 stringr_0.6.2 tools_3.0.0


Actualización para reflejar los cambios en el código de los últimos años y la preferencia de que las personas trabajen normalmente en .RMarkdown en lugar de en el formato de archivo Rnw.

El paquete kableExtra en R es la forma más fácil de ajustar el tamaño de las tablas. Puede escalar el ancho de la tabla usando la función kable_styling(latex_options = "scale_down") . Esto forzará la tabla al ancho de la página.

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

Para obtener más ejemplos del paquete kableExtra, consulte el paquete aquí: https://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf

Aquí hay un ejemplo de MWE:

--- title: "MWE" author: "Mikey Harper" date: "7 November 2017" output: pdf_document --- ```{r setup, include=FALSE} library(kableExtra) library(magrittr) knitr::opts_chunk$set(echo = TRUE) ``` ```{r} # Build the dataframe wide.df <- cbind(iris[1:10,],iris[1:10,],iris[1:10,]) ``` ```{r} # Basic table knitr::kable(wide.df) ``` ```{r} # Scaled Table knitr::kable(wide.df, format = "latex", booktabs = TRUE) %>% kable_styling(latex_options = "scale_down") ```


La tabulary paquete LaTeX es mejor para ajustar una tabla al ancho de la página. Se puede decir que rompa líneas por ejemplo. Pero no sé si puedes usarlo con xtable.


Lo siguiente funciona bien para mí:

print(xtable(wide.df), scalebox=''0.75'', floating=FALSE)

Esto es especialmente útil para tablas en R Markdown.


Los siguientes son algunos pasos típicos que puede seguir para reducir el tamaño de la tabla.

/setlength{/tabcolsep}{1pt} /resizebox{/linewidth}{!}{ %% <-- The most effective way to fit a table / figure /begin{tabular} ... ... /end{tabular} } %resizebox

Para uso de texto, utilice el modo /sf para que el texto sea más visible.


Otra opción podría ser algo como:

my_wrap <- function(x, width) { x_split <- strwrap(x, width = width, simplify = FALSE) x_split <- lapply(x_split, paste, collapse = " //// ") vapply(x_split, function(s) sprintf("//begin{tabular}[x]{@{}c@{}}%s//end{tabular}", s), character(1)) }

Aplicado a todas las columnas que están a lo ancho.


Puede pasar un argumento de print.xtable a print.xtable como tal

<<results=''asis''>>= print(xtable(wide.df), scalebox=''0.75'') @

Eso no xtable automáticamente el tamaño de la tabla para que se ajuste a la página (desafortunadamente xtable no admite el argumento de un nuevo resizebox ), pero para muchas aplicaciones, lo anterior puede ser lo suficientemente bueno.

El problema con su código es que xtable devuelve la tabla envuelta en un entorno de table y no solo en una table . Sin embargo, lo que tienes que envolver en la resizebox es el tabular . La única manera que puedo ver para que esto funcione como usted quiere es permitir que xtable devuelva solo el tabular , así:

/begin{table} /resizebox{/textwidth}{!} { <<results=''asis''>>= print(xtable(wide.df), floating=FALSE) @ } /end{table}

y luego escribir el código LaTeX a su alrededor manualmente.


Una solución basada en huxtable (mi paquete):

library(huxtable) h <- as_hux(iris) width(h) <- 0.5

Esto no garantiza que la tabla no exceda el ancho especificado, y si es así, se sobrepasará. Las posibles soluciones incluyen cambiar el tamaño de fuente:

font_size(h) <- 8

O partiendo la mesa:

h1 <- h[, 1:5] h2 <- h[, -(1:5)]