问题
I have a dataframe column that I'm currently formatting using the formattable::color_tile
function (below):
color_tile( "red", "springgreen" )
My issue with this is that the values near the middle are an ugly brown color, and I'd ideally like it to be a red-amber-green gradient, but color_tile seems to only be able to take min.color and max.color parameters - is it possible to use a 3rd color with either this or similar formatting functions in R?
回答1:
It doesn't look like the function is designed to handle more than two colors, but you can make your own building on that template.
color_tile2 <- function (...) {
formatter("span", style = function(x) {
style(display = "block",
padding = "0 4px",
`border-radius` = "4px",
`background-color` = csscolor(matrix(as.integer(colorRamp(...)(normalize(as.numeric(x)))),
byrow=TRUE, dimnames=list(c("red","green","blue"), NULL), nrow=3)))
})}
which can be used like
formattable(mtcars, list(mpg = color_tile2(c("white", "pink"))))
formattable(mtcars, list(mpg = color_tile2(c("blue", "green", "pink"))))
回答2:
Determine which row numbers you want between color 1 and 2 and which row numbers for between color 2 and 3. Then call color_tile twice. For example
formattable(x,
list(
area(col = 2, row = c(1,3,5,7,8,9,10,13,14,15)) ~ color_tile("red", "white"),
area(col = 2, row = c(2,4,6,11,12,16)) ~ color_tile("white","green")
))
Won't fix it perfectly, since it won't keep the relative intensity of the colors on either side
回答3:
In an issue' entry of the github' formattable site, I found this which seems useful and solved my problem to have a column color coded on continuous scale from negative to positive as red to green, without having the "brown" in the middle (this will deliver "transparent"):
library(dplyr)
library(kableExtra)
library(formattable)
x = currency(c(1000000,
-3000,
400000,
800000,
-1700,
0,
50000))
x = ifelse(
x <= 0.0,
color_tile("red", "transparent")(x*c(x<=0)),
color_tile("transparent", "green")(x*c(x>=0)))
x %>%
kable(escape = F) %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = F)
This is the relevant link: https://github.com/renkun-ken/formattable/issues/102#issuecomment-408649019
来源:https://stackoverflow.com/questions/49885176/is-it-possible-to-use-more-than-2-colors-in-the-color-tile-function