33

Rstudioとknitrを使用してラテックステーブルをpdfで作成する場合、幅の広いテーブルをページに合わせるにはどうすればよいですか? 私は基本的にテーブルを縮小する方法を探しています。

数字では、out.width= を使用して Knitr で非常に簡単ですが、表ではそれを行う方法を見つけることができないようです。

助言がありますか?

\documentclass{article}

\begin{document}

次の表は幅が広すぎて pdf に収まりません。収まるように縮小する簡単な方法があることを願っています。この例では、xtable()、stargazer()、および 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}

Stat-R の提案に従って、 resizebox を使用しようとしましたが、機能しません。

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

reshapebox を使用しようとしましたが、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}

次のエラーが表示されます。

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

9 に答える 9

18

like soにscalebox引数を渡すことができますprint.xtable

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

ページに合わせてテーブルのサイズを自動的に変更するわけではありませxtableんが (残念ながら、引数はサポートされていませんresizebox)、多くのアプリケーションでは上記で十分な場合があります。

コードの問題は、表形式だけでなく、環境にxtableラップされたテーブルを返すことです。ただし、 でtableラップする必要があるのは. これを希望どおりに機能させる唯一の方法は、次のように xtable に のみを返すようにすることです。resizeboxtabulartabular

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

そして、その周りに LaTeX コードを手動で記述します。

于 2014-01-21T11:04:18.650 に答える
2

以下は、テーブル サイズを縮小するために実行できる一般的な手順の一部です。

\setlength{\tabcolsep}{1pt}

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

テキスト使用\sfモードの場合、テキストをより見やすくします。

于 2014-03-22T05:02:23.117 に答える
1

古き良き 80 文字幅の VT100 端末のように、幅の広いテーブルを部分に自動的に分割するのはどうですか? これは通常、LaTex/docx/odt テーブルの良い方法であり、デフォルトで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  
--------------------------------------

?pandoc.table詳細については、 およびを参照table.split.table?panderOptionsてください。

于 2013-05-12T16:39:24.090 に答える
0

Stargazerでこれを行うための醜いが効果的な方法があります。上記のアプローチよりも長いように見えますが、回帰出力を報告している場合、これは私にとってより簡単なワークフローになる可能性があります。

関数 "WrapPageWidthLatex " は、サイズ変更ボックス コードを stargazer 出力に追加/先頭に追加します。float = FALSE を設定し、テーブルのスペースを節約するために他の多くのオプションを設定したことを前提としています。残りは、結果の出力をクリーンアップするだけです。「include=FALSE」は、ドキュメント内の迷惑なスターゲイザーの引用情報を抑制するのに役立ちます。"float = FALSE" は、これを float にする latex コードを抑制するのに役立ちます。これにより、必要なコードを簡単に追加できます。"column.sep.width = "0pt"" および "font.size="tiny"" は、列を狭くするのに役立ち、再スケーリングの必要性を減らします。


title: "StackOverflow Example"
author: "Bkay"
date: "6/15/2020"
output:
  beamer_presentation:
    keep_tex: true 
header-includes:
   - \usepackage{dcolumn}  
---

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


## Slide with R Output
```{r rcodehere, results='asis', warning = FALSE, echo=FALSE}
WrapPageWidthLatex <- function(InputCode){
    OutputCode = append("\\resizebox{\\textwidth}{!}{", InputCode)
    OutputCode = rlang::prepend("}", OutputCode)    
    return(OutputCode)
}
x = -10:10
xsqr = x^2
y = 2 + x*3 + 0.2 * xsqr + rnorm(length(x))

model1 = lm(y ~ x)
model2 = lm(y ~ x + xsqr)

cat(
    WrapPageWidthLatex(
        capture.output(
            stargazer(
                model1, model2,
                align=TRUE, 
                omit.stat=c("adj.rsq", "ser", "f"), 
                font.size="tiny", 
                header=FALSE, 
                column.sep.width = "0pt", 
                float = FALSE, 
                type="latex"
                )
            )
        )
    )    

```

出力: ここに画像の説明を入力

于 2020-06-15T20:11:47.233 に答える