Неравномерное выравнивание в таблице форматирования R в сочетании с kableExtra

Мне не удается получить выровненные по левому краю числа в kableExtra в сочетании с штриховыми диаграммами formattable в ячейках таблицы.

Код для воспроизведения в формате rmarkdown:


title: Вывод без названия: html_document

knitr::opts_chunk$set(echo = TRUE)

library("formattable")
library("kableExtra")

Пример

summary(cars)
cars$speed <- cars$speed * 100

Получите хороший стол

Первый столбец таблицы заполнен крошечными гистограммами. Весь код написан после http://haozhu233.github.io/kableExtra/awesome_table_in_html.html мануал kableExtra.

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) показывает, что направление элемента - rtl, что, по-видимому, является значением по умолчанию в kableExtra. Изменение значения этого параметра вручную на ltr дает хорошо выровненные по левому краю значения, простирающиеся по краю полосы.

Таблица с форматированием штриховой диаграммы

К сожалению, мне не удалось найти параметр в color_bar, чтобы изменить это поведение.

Любая помощь, указывающая мне способ выравнивания значений по левому краю, была бы очень признательна.


person sargas    schedule 16.09.2020    source источник
comment
Похоже, вам, возможно, придется отредактировать вызов функции: github.com/renkun -ken / formattable / issues /   -  person juljo    schedule 16.09.2020


Ответы (1)


как упомянул @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), ...))))
}

Это жестко закодировало поведение слева направо, но здесь тоже не является переменным.

person sargas    schedule 01.10.2020