【问题标题】:R Markdown - Positioning table and plot side by sideR Markdown - 并排定位表和绘图
【发布时间】:2018-12-06 20:26:01
【问题描述】:

我正在使用 R Markdown 输出到 pdf,并且我正在尝试使表格和绘图水平并排对齐。我可以让fig.align = "right" 将绘图与页面右侧对齐,但它绘制在表格下方(使用kable 格式化),而不是与它并排。有什么建议吗?

【问题讨论】:

    标签: r-markdown


    【解决方案1】:

    这是使用TeX包floatrow的一种方式:

    ---
    title: "Untitled"
    header-includes:
      - \usepackage{floatrow}
    output: 
      pdf_document:
        keep_tex: true
    ---
    
    \newfloatcommand{btabbox}{table}
    
    \begin{figure}[H]
      \begin{floatrow}
        \ffigbox{%
    ```{r, fig.align = "right", echo = F}
    plot(mpg ~ hp, data = mtcars)
    ```
        }{\caption{A figure}}
    
        \btabbox{%
    ```{r, fig.align = "right", echo = F}
    knitr::kable(head(mtcars[,1:3]), format = "latex")
    ```
        }{\caption{A table}}
      \end{floatrow}
    \end{figure}
    

    【讨论】:

      【解决方案2】:

      我更喜欢 Martin 的方法,但如果您想要一个较少依赖 LaTeX 的解决方案,您可以将表格转换为网格图形和plot it as a subfigure

      ---
      header-includes:
        - \usepackage{subfig}
      output: pdf_document
      ---
      
      ```{r, fig.cap='two plots', fig.subcap= c('A figure', 'A table'), out.width = '.49\\linewidth', echo = F, fig.align='center'}
      library(gridExtra)
      library(grid)
      
      plot(mpg ~ hp, data = mtcars)
      
      grid.newpage()
      grid.table(head(mtcars[,1:6]), theme = ttheme_minimal())
      ```
      

      【讨论】:

      • 如果我想这样做但在 html 输出中怎么办?
      【解决方案3】:

      我可以通过 multicol 包和 minipages 的组合来做到这一点。只是另一种选择...

      代码如下:

      ---
      title: "Untitled"
      header-includes:
        - \usepackage{multicol}
        - \newcommand{\btwocol}{\begin{multicols}{2}}
        - \newcommand{\etwocol}{\end{multicols}}
      output: 
        pdf_document:
          keep_tex: true
      ---
      
      ```{r minipage_funs, echo = FALSE}
      ## adding minipages in Rmarkdown only seems to work for me when returned from function
      fig_table_mp_start <- function() {
        return("\\begin{minipage}{\\textwidth}")
      }
      fig_table_mp_end <- function() {
        return("\\end{minipage}")
      }
      ```
      
      `r fig_table_mp_start()`
      
      \btwocol
      
      ```{r, fig.align = "right", echo = FALSE}
      plot(mpg ~ hp, data = mtcars)
      ```
      
      
      ```{r, fig.align = "right", echo = FALSE}
      knitr::kable(head(mtcars[,1:3]), format = "latex")
      ```
      
      \etwocol
      
      `r fig_table_mp_end()`
      

      我假设您可以使用填充来使其看起来更漂亮。

      【讨论】:

        猜你喜欢
        • 2016-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        • 1970-01-01
        • 2016-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多