问题描述
我无法在kableExtra中与表格单元格中的formattable的条形图相结合得到左对齐的数字。
以rmarkdown格式复制的代码:
标题:“无标题” 输出:html_document
knitr::opts_chunk$set(echo = TRUE)
library("formattable")
library("kableExtra")
示例
summary(cars)
cars$speed <- cars$speed * 100
获得一张漂亮的桌子
表的第一列充满了小条形图。 所有代码均遵循kableExtra的http://haozhu233.github.io/kableExtra/awesome_table_in_html.html手册编写。
plot.table <- cars
# need to modify the first few values to make sure the effect is visible.
plot.table$speed[1] <- 3
plot.table$speed[2] <- 25
plot.table$speed[3] <- 100
plot.table$speed <- color_bar("lightgreen")(plot.table$speed)
kbl(x = plot.table,escape = F) %>%
kable_styling(bootstrap_options = c("striped","hover"),fixed_thead = T)
前三行显示的值与表中其余值相比较小。 这会使它们的条形变短,并导致怪异的数字对齐。对齐是根据绿色条的最右端完成的。
检查相应的html元素(例如FireFox“ Inspect Element”)会发现元素“ direction”为“ rtl”,这似乎是kableExtra中的默认设置。 手动将此参数的值修改为“ ltr”,会产生很好的左对齐值,该值沿钢筋的末端延伸。
不幸的是,我无法在color_bar中找到参数来修改此行为。
任何帮助我指出一种使数值保持一致的方法,将不胜感激。
解决方法
正如@juljo提到的,显然需要修改各自的功能。该函数的主体可以从包装内容中复制出来。
f.color_bar <- function (color = "lightgray",fun = "proportion",...)
{
fun <- match.fun(fun)
formattable::formatter("span",style = function(x) style(display = "inline-block",direction = "ltr",`border-radius` = "4px",`padding-right` = "2px",`background-color` = csscolor(color),width = percent(fun(as.numeric(x),...))))
}
此代码对从左到右的行为进行了硬编码,但在这里也不可变。