Прозрачный эквивалент заданного цвета - PullRequest
49 голосов
/ 08 ноября 2011

У меня было это несколько раз, так что вот: я делаю некоторые графики, которые содержат кривые с оценками параметра, заданного параметром настройки.

Как правило, у меня также есть SD для каждой оценкизначение, чтобы я мог показывать полосы ошибок вокруг каждого из них.

Однако мне не нравятся полосы ошибок, и я предпочел бы какую-то сглаженную версию.Это само по себе не проблема (то есть я знаю, как это сделать).Тем не менее, мой график содержит несколько подобных кривых, каждый из которых имеет свой собственный цвет.Поэтому я хотел бы добавить «сглаженную область ошибок» к каждой кривой цветом, который соответствует цвету самой кривой.Конечно, я хотел бы сделать это несколько прозрачно, так что я все еще могу видеть другие кривые через «область ошибок».

Итак, мой вопрос: заданный цвет (определяется либо числом, либоname или значение rgb --- обратите внимание, что первые два представляют дополнительную проблему, но это происходит довольно часто, так как базовые функции построения графиков принимают их как допустимые значения цвета), как мне найти подходящий цвет, который имеет тот же rgb?но другой (заданный) альфа-уровень (прозрачность).Я хотел бы такую ​​функцию, как:

makeTransparent<-function(someColor, alpha=100)
{
  newColor<-someColor + alpha #I wish
  return(newColor)
}

Это должно работать для таких вещей, как:

makeTransparent(2)
makeTransparent("red")
makeTransparent(rgb(0,0,1))

Edit Я ненавижу, когда я пропускаю что-то очевидное, но @Темел указал мне на это (спасибо еще раз).Вот полное решение (примечание: работает векторизация, поэтому вы можете передать более одного цвета; в настоящее время поддерживается только одна альфа):

#note: always pass alpha on the 0-255 scale
makeTransparent<-function(someColor, alpha=100)
{
  newColor<-col2rgb(someColor)
  apply(newColor, 2, function(curcoldata){rgb(red=curcoldata[1], green=curcoldata[2],
    blue=curcoldata[3],alpha=alpha, maxColorValue=255)})
}

Ответы [ 4 ]

63 голосов
/ 19 июня 2015

В пакете grDevices есть функция adjustcolor, которая в вашем случае работает следующим образом:

    adjustcolor( "red", alpha.f = 0.2)
46 голосов
/ 08 ноября 2011

Вы смотрели на ?rgb?

Использование:

rgb (красный, зеленый, синий, альфа, имена = NULL, maxColorValue = 1)

Также можно указать значение альфа-прозрачности (в качестве непрозрачности «0» означает полностью прозрачный, а «max» означает непрозрачный).Если альфа 'не указана, генерируется непрозрачный цвет.

Параметр alpha предназначен для указания прозрачности.col2rgb разбивает R цветов, указанных другими способами, в RGB, чтобы вы могли передать их в rgb.

5 голосов
/ 27 декабря 2013

Я думаю, что чаще указывать alpha в [0,1].Эта функция делает это, плюс принимает несколько цветов в качестве аргументов:

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)

}

И, для проверки:

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"
3 голосов
/ 26 июня 2018

Преобразование Ценный комментарий в ответ:

Использовать alpha из пакета scales - первый аргумент - цвет, второй альфа (в диапазоне 0-1).

Или напишите функцию с ее помощью:

makeTransparent <- function(someColor, alpha=100) scales::alpha(someColor, alpha/100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...