Is it possible to use more than 2 colors in the color_tile function?

荒凉一梦 提交于 2020-01-11 10:22:16

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!