Transparent equivalent of given color

后端 未结 5 1398
温柔的废话
温柔的废话 2020-12-23 19:11

I\'ve had this a few times, so here goes: I\'m making some plots which hold curves with estimates of a parameter given a tuning parameter.

Typically, I also have SDs

相关标签:
5条回答
  • 2020-12-23 19:42

    Have you had a look at ?rgb?

    Usage:

    rgb(red, green, blue, alpha, names = NULL, maxColorValue = 1)

    An alpha transparency value can also be specified (as an opacity, so ‘0’ means fully transparent and ‘max’ means opaque). If alpha’ is not specified, an opaque colour is generated.

    The alpha parameter is for specifying transparency. col2rgb splits R colors specified in other ways into RGB so you can feed them to rgb.

    0 讨论(0)
  • 2020-12-23 19:49

    There is a function adjustcolor in grDevices package, that works like this in your case:

        adjustcolor( "red", alpha.f = 0.2)
    
    0 讨论(0)
  • 2020-12-23 19:51

    Easily convert hexidecimal colour codes like so

    adjustcolor("#F8766D", alpha.f = 0.2)
    [1] "#F8766D33"
    

    To confirm it worked:

    library(scales)
    show_col(c("#F8766D", "#F8766D33"))
    

    0 讨论(0)
  • 2020-12-23 19:57

    Converting valuable comment to answer:

    Use alpha from package scales - first argument is colour, second alpha (in 0-1 range).

    Or write function overt it:

    makeTransparent <- function(someColor, alpha=100) scales::alpha(someColor, alpha/100)
    
    0 讨论(0)
  • 2020-12-23 19:58

    I think is more common to specify alpha in [0,1]. This function do that, plus accept several colors as arguments:

    makeTransparent = function(..., alpha=0.5) {
    
      if(alpha<0 | alpha>1) stop("alpha must be between 0 and 1")
    
      alpha = floor(255*alpha)  
      newColor = col2rgb(col=unlist(list(...)), alpha=FALSE)
    
      .makeTransparent = function(col, alpha) {
        rgb(red=col[1], green=col[2], blue=col[3], alpha=alpha, maxColorValue=255)
      }
    
      newColor = apply(newColor, 2, .makeTransparent, alpha=alpha)
    
      return(newColor)
    
    }
    

    And, to test:

    makeTransparent(2, 4)
    [1] "#FF00007F" "#0000FF7F"
    makeTransparent("red", "blue")
    [1] "#FF00007F" "#0000FF7F"
    makeTransparent(rgb(1,0,0), rgb(0,0,1))
    [1] "#FF00007F" "#0000FF7F"
    
    makeTransparent("red", "blue", alpha=0.8)
    [1] "#FF0000CC" "#0000FFCC"
    
    0 讨论(0)
提交回复
热议问题