У меня есть столбец, который является суммой двух других столбцов. Я пытаюсь получить форматер color_bar
с двумя цветами, каждая из которых представляет отдельные числа. Я попытался увеличить код цвета, добавив еще color_bar
. Идея заключалась в том, что большой балл будет столбцом суммы. Тогда мне просто нужен еще один бар, чтобы быть одним из отдельных номеров, и у меня есть мой бар с двумя цветами.Двухцветная color_bar в R formattable
Пара проблем: В основном, когда я удаляю переменную до ~
и размещаю столбец в блоке ширины, R, похоже, не понимает ссылку. Во-вторых, когда я просто пытаюсь увидеть, возможно ли иметь два цветовых блока, отрегулировав высоту второго блока, отобразится только второй блок. Я поставил код ниже.
Дайте мне знать, есть ли у кого-нибудь советы, идеи или решения. Я открыт для альтернативных идей, чтобы показать, как два отдельных столбца суммируются с общим столбцом. Как я печатаю, может быть, искру?
Вот код:
#Make a formattable with a dual color bar
#Packages
library(dplyr)
library(formattable)
#Function
#Ideally, I'd like it to be a function, but can't visualize how to do it.
dualbar <- function(bar1 = "lightgray", bar2 = "lightblue",
fun = "comma", digits = 0) {
fun <- match.fun(fun)
formatter("span", x ~ fun(x, digits = digits),
style = y ~ style(
display = "inline-block",
direction = "rtl",
"border-radius" = "4px",
"padding-right" = "2px",
"background-color" = csscolor(bar1),
width = percent(proportion(as.numeric(y), na.rm = TRUE))),
style = z ~ style(
display = "inline-block",
direction = "rtl",
"border-radius" = "4px",
"padding-right" = "2px",
"background-color" = csscolor(bar2),
width = percent(proportion(as.numeric(z), na.rm = TRUE)),
height = "10px")
)
}
#Generate Data
set.seed(1234)
df <- data.frame(month = month.name[1:12],
valx = runif(12, 0, 5),
valy = runif(12, 2, 7))
df$total <- df$valx + df$valy
tab <- df %>%
formattable(list(area(row = 1:12, col = 2) ~
formatter("span", x ~ comma(x, digits = 0),
style = y ~ style(
display = "inline-block",
direction = "rtl",
"border-radius" = "4px",
"padding-right" = "2px",
"background-color" = csscolor("lightgray"),
width = percent(proportion(as.numeric(y), na.rm = TRUE))),
z ~ style(
display = "inline-block",
direction = "rtl",
"border-radius" = "4px",
"padding-right" = "2px",
"background-color" = csscolor("lightblue"),
width = percent(proportion(as.numeric(z), na.rm = TRUE)))
))) %>%
select(-valx, -valy) %>%
formattable::as.htmlwidget()
tab