提问人:Ben_89 提问时间:10/20/2023 更新时间:10/21/2023 访问量:39
如何在kabeleExtra中用cell_spec()填充表格的整个单元格?
How to fill entire cell of a table with cell_spec() in kabeleExtra?
问:
继刚才提出的这个问题之后,有谁知道我如何使用 中的函数填充单元格的整个背景?cell_spec()
kableExtra
我在下面有一些虚拟数据,但我只能设法为文本的背景着色。我更喜欢填充整个单元格,并且我非常愿意在 R Markdown 文件中创建我的表格。有谁知道解决这个问题的方法?谢谢。kableExtra
library(kableExtra)
name <- paste("Name", LETTERS)
val <- rnorm(26, 100, 50)
d <- data.frame(name, val)
d$val <- cell_spec(d$val, background = if_else(d$val > mean(d$val) + sd(d$val),
"#DBEBF6",
if_else(d$val < mean(d$val) - sd(d$val),
"#FEE7DA",
"transparent")))
kbl(d, escape = FALSE) %>%
kable_styling()
答:
1赞
stefan
10/20/2023
#1
问题在于它只针对单元格内容,即包含内容的标签,而不是父表单元格,即标签。默认情况下,一些填充会添加到表格单元格的内容中。cell_spec
span
td
8px
填充整个单元格的一个选项是使用 的参数 ,即将边距设置为 ,将填充设置为 ,以便单元格内容填充单元格的整个高度。此外,设置为填充单元格的整个宽度。extra_css=
cell_spec
-8px
8px
display: flex
library(kableExtra)
set.seed(123)
name <- paste("Name", LETTERS)
val <- rnorm(26, 100, 50)
d <- data.frame(name, val)
d$val <- cell_spec(d$val,
background = dplyr::case_when(
d$val > mean(d$val) + sd(d$val) ~ "#DBEBF6",
d$val < mean(d$val) - sd(d$val) ~ "#FEE7DA",
.default = "transparent"
),
extra_css = "margin: -8px; padding: 8px; display: flex;"
)
kbl(d, escape = FALSE) %>%
kable_styling()
编辑我们需要一些额外的 CSS 来居中对齐值(例如,参见 Aligning items in a flex container):display: flex
d$val <- cell_spec(d$val,
background = dplyr::case_when(
d$val > mean(d$val) + sd(d$val) ~ "#DBEBF6",
d$val < mean(d$val) - sd(d$val) ~ "#FEE7DA",
.default = "transparent"
),
extra_css = paste(
"margin: -8px; padding: 8px;",
"display: flex; align-items: center;",
"justify-content: center;",
sep = "; "
)
)
kbl(d,
align = c("l", "c"),
escape = FALSE
) %>%
kable_styling()
评论
0赞
Ben_89
10/21/2023
谢谢你,@stefan。这很有效。我想知道是否有办法使单元格内容/文本居中。当我实现 中的参数时,即使使用 .您还有其他建议来确保色谱柱保持居中吗?谢谢。val
extra_css =
cell_spec()
kbl(d, align = c("l", "c"))
val
1赞
stefan
10/21/2023
嗨,本。看我的编辑。因为我们需要一些额外的CSS。display: flex
0赞
Ben_89
10/22/2023
谢谢你,@stefan!这非常有效,正是我所需要的!
评论