Выравнивание и интервал tableGrob в документе Rmarkdown/knitr-HTML

У меня есть следующие проблемы при использовании приятной функции tableGrob() от gridExtra пакет для построения таблицы в HTML-документе, созданном Rmarkdown и knitr,

Вот воспроизводимый пример:

library(datasets)
library(dplyr)
mtcars$cyl <- as.factor(mtcars$carb)
carb.mpg <- mtcars %>%
            select(carb,mpg) %>%
            group_by(carb)   %>%
            summarise_each(funs(sum(.,na.rm=TRUE)),-carb) %>%
            arrange(desc(mpg))
##plot the table
tab <- tableGrob(carb.mpg, cols=c("carb","mpg"), 
              theme=ttheme_minimal())
grid.arrange(tab, top=textGrob("Cars MPG per CARB",gp=gpar(fontsize=16,font=1)) )

За knitr общие варианты чанка:

title: "Test with cars"
output: 
html_document:
keep_md: true

{r setoptions, echo=FALSE} library(knitr) opts_chunk$set(message=FALSE,warning=FALSE)

Как видно из прикрепленного снимка, проблема заключается в огромном пространстве между таблицей и ее заголовком и легендой. Было бы также хорошо, если бы я мог выровнять по левому краю таблицу в документе.

Любая помощь приветствуется.

2 ответа

Решение

После некоторой настройки я обнаружил, что положение стола можно контролировать с помощью viewport (х и у); ширина / высота кажутся устаревшими.

#plot the table
 tab <- tableGrob(carb.mpg, cols=c("carb","mpg"), 
          theme=ttheme_minimal())
 grid.newpage()
 vp  <- viewport(width=0.90,height=0.90,x=0.10,y=0.80,clip="on")
 pushViewport(vp)
 grid.draw(tab) 

Это решает проблему только частично: огромное вертикальное пространство все еще там.

Возможно, это дает какое-то направление для решения проблемы?

РЕДАКТИРОВАТЬ: одним из способов, с помощью которого я мог управлять пробелами / полями, было уменьшение параметров размера фигуры в knitr варианты чанка, т.е.

{r plot mpg cars, fig.height=value, fig.width=value}

Ты можешь попробовать это

tg <- textGrob("Cars MPG per CARB", gp=gpar(fontsize=16,font=1))
grid.arrange(tg, tab, heights=unit.c(grobHeight(tg), sum(tab$heights)),
             vp=viewport(x=unit(0,"npc") + 
                            0.5*unit.pmax(grobWidth(tg), 
                                          sum(tab$widths))))

введите описание изображения здесь

Другие вопросы по тегам