Подтвердить что ты не робот

Прозрачный эквивалент заданного цвета

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

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

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

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

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

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

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

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

#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)})
}
4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

    adjustcolor( "red", alpha.f = 0.2)

Ответ 3

Я думаю, что чаще всего указывается 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"