Vraag Pas de LaTeX-tabelbreedte automatisch aan om pdf te passen met knitr en Rstudio


Gebruik Rstudio en knitr om latex-tabellen in pdf te produceren, hoe maak ik brede tabellen op de pagina? Ik ben eigenlijk op zoek naar een manier om de tafels te verkleinen.

Met cijfers is het heel eenvoudig in Knitr met out.width =, maar met tabellen kan ik niet lijken een manier te vinden om het te doen.

Suggesties?

\documentclass{article}

\begin{document}

De volgende tabellen zijn te breed om in de pdf te passen. Ik hoop dat er een eenvoudige manier is om ze te verkleinen om te passen. In dit voorbeeld heb ik tabellen gebruikt die zijn gegenereerd met de functies xtable (), stargazer () en 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}

Naar aanleiding van Stat-R's suggesties heb ik geprobeerd om resizebox te gebruiken maar kan het niet aan de praat krijgen:

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

Ik heb geprobeerd om reshapebox te gebruiken, maar ik heb geen idee hoe ik het in Rstudio / knitr kan laten werken:

<<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}

Ik krijg de volgende foutmelding:

! 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 

20
2018-05-12 12:07


oorsprong


antwoorden:


Je kunt een scalebox argument voor print.xtable zoals zo

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

Daarmee wordt de grootte van de tabel niet automatisch aangepast aan de pagina (helaas xtable ondersteunt geen a resizebox argument) maar voor veel toepassingen kan het bovenstaande goed genoeg zijn.

Het probleem met je code is dat xtable geeft de tabel terug gewikkeld in a table omgeving en niet alleen een tabel. Wat moet je inpakken in de resizebox, echter, is het tabular. De enige manier om dit te laten werken zoals jij het wilt, is door xtable alleen de tabular, zoals zo:

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

en dan handmatig de LaTeX-code eromheen te schrijven.


12
2018-01-21 11:04



Updaten om de veranderingen in code van de afgelopen jaren weer te geven, en de voorkeur voor mensen om typisch in .RMarkdown in plaats van Rnw-bestandsindeling te werken.

De kableExtra pakket in R is de gemakkelijkste manier om de grootte van tabellen aan te passen. U kunt de breedte van de tabel schalen met behulp van de functie kable_styling(latex_options = "scale_down"). Dit dwingt de tabel tot de breedte van de pagina.

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

Bekijk voor meer voorbeelden van het pakket kableExtra het pakket hier: https://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf

Hier is een voorbeeld van 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")
```

enter image description here


7
2017-11-07 14:40



Hier volgen enkele typische stappen die u kunt nemen om de tabelgrootte te verkleinen.

\setlength{\tabcolsep}{1pt}

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

Voor tekstgebruik \sf modus om de tekst beter zichtbaar te maken.


2
2018-03-22 05:02



Hoe zit het met het automatisch splitsen van de brede tafels in onderdelen, net als op de goede oude 80 tekens brede VT100-terminals? Dit is meestal een goede methode voor LaTex / docx / odt-tabellen en wordt standaard ingesteld in handlanger:

> 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  
--------------------------------------

Alsjeblieft zie ?pandoc.table en table.split.table in ?panderOptions voor meer details.


0
2018-05-12 16:39



Het LaTeX-pakket tabulary is beter in het aanpassen van een tabel aan de paginabreedte. Het kan worden verteld om bijvoorbeeld lijnen te breken. Maar ik weet niet of je het met xtable kunt gebruiken.


0
2018-06-12 13:14



Een andere optie is misschien iets als:

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))
}

toegepast op alle kolommen die te breed zijn


0
2018-03-18 23:11



Het volgende werkt prima voor mij:

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

Dit is vooral handig voor tabellen in R Markdown.


0
2018-05-27 05:15



EEN huxtable-gebaseerde oplossing (mijn pakket):

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

Dit garandeert niet dat de tabel de gespecificeerde breedte niet overschrijdt, en indien dus het zal overlopen. Mogelijke oplossingen zijn het wijzigen van de tekengrootte:

font_size(h) <- 8

Of de tafel splitsen:

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

0
2018-03-02 07:40