【问题标题】:Format color of specific line of a tableGrobtableGrob 特定行的格式颜色
【发布时间】:2018-01-16 14:50:40
【问题描述】:

有没有办法通过主题告诉tableGrob 更改特定行的颜色和格式(加粗)?

我使用tableGrob 得到以下输出:

然而,我希望达到以下审美,并将特定线条加粗并更改其颜色,如下例所示:

基于以下示例:enter link description here

 t1 <- ttheme_default(core=list(
        fg_params=list(fontface=c(rep("plain", 4), "bold.italic")),
        bg_params = list(fill=c(rep(c("grey95", "grey90"),
                                    length.out=4), "#6BAED6"),
                         alpha = rep(c(1,0.5), each=5))
        ))

grid.table(iris[1:5, 1:3], theme = t1)

行的颜色每 4 行更改一次。结果是: result

但是,我需要根据具体情况进行具体说明。

【问题讨论】:

  • 请在您的问题中添加可重现的示例。您可以使用kableExtra 轻松实现想要的结果
  • 您可以使用其他软件包还是想坚持使用tableGrob
  • @PoGibas 感谢您的回复。是的,不幸的是,就我而言,我必须坚持使用 tableGrob,它是生成网格报告并将图表 (ggplot2) 和表格与网格在同一页面上组合的唯一方法。我已经实现了这一点,但我不知道如何使用 tableGrob 更改颜色和格式化特定行。我的组织不允许运行 R-studio 或 html,因此 kableExtra 可能不是可实现的解决方案。
  • 不难将stackoverflow.com/questions/18414001/… 概括为您的情况,只需更改背景 grob 参数即可。
  • 只需创建一个与数据行数相等的颜色向量。例如。 dat &lt;- iris[1:10, 1:3] ; cols &lt;- rep("grey95", nrow(dat)) ; rowsToChange &lt;- c(1,5,9) ; cols[rowsToChange] &lt;- "red" ; t1 &lt;- ttheme_default(core=list(bg_params = list(fill=cols))) ; grid.table(iris[1:10, 1:3], theme = t1)

标签: r gridextra gtable grob


【解决方案1】:

如果您戳我评论中的链接以了解如何“查找” grobs,那么您可以执行以下操作:

library(grid)
library(gridExtra)

tg <- tableGrob(iris[1:5, 1:3])

for (i in c(19,24,29)) tg$grobs[[i]] <- editGrob(tg$grobs[[i]], gp=gpar(col="white"))
for (i in c(34,39,44)) tg$grobs[[i]] <- editGrob(tg$grobs[[i]], gp=gpar(fill="blue"))

grid.newpage()
grid.draw(tg)

如果这是常规的参数化报告,那么它是一个“一次性”的操作来计算单元格位置并应用您的自定义格式。

否则,一定要开发一组样式函数来定位“单元格”,就像在谷歌表格或 Excel 中那样。

【讨论】:

  • 感谢您的回答。是的,它确实是一个常规的参数化报告,我提前知道需要格式化的行的数量和位置,并且有粗体字母和蓝色轮廓。因此,例如,我需要将第 3、6、8、11、12、13 行标记为蓝线。我不太了解 tableGrob 情况以及如何定位特定行。再次感谢您的宝贵时间,非常感谢您提供任何建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多