2
brewer.pal(n=8,name="Paired")

最大 8 つの色のペアを作成できますが、印刷に適した色はごくわずかです。暗いペンダントを生成するより柔軟な関数はありますか? 暗い方がいい

  • 暗い場所では同じ色に見える
  • よく印刷可能
  • 明るいものと区別しやすい

すでにそれを解決できるカラーブリーダー ツールはありますか?

> dark("red")
[1] "FF5555"

この関数を理解しましたが、ベクトルではなく単色しか処理できません。「ベクトル化」できれば、この関数は優れたソリューションになります。

setbrightness <- function(rgbcolour, brightness) {
  ## usage: setbrightness(col2rgb("red", 0.2)
  thiscolour <- rgb2hsv(rgbcolour)
  return(hsv(h=thiscolour[1], s=thiscolour[2], v=brightness))
}
4

1 に答える 1

10

これは、使用できるベクトル化された関数です。アイデアは、RGB を HSV に変換することです。ここで、V は明るさに対応し、RGB に戻ります。

library(grDevices)
# Every element of r, g, b must be in [0, 255]
# Every element of conv[[3]] must be in [0, 1], 1 is highest brightness
brightness <- function(r, g, b, factor) {
  conv <- as.list(as.data.frame(t(rgb2hsv(r, g, b))))
  conv[[3]] <- pmin(1, conv[[3]] * factor)
  do.call(hsv, conv)
}

# Reducing brightness by 20%
brightness(55, 100, 150, 0.8)
#[1] "#2C5078"

# Increasing by 20%
brightness(55, 100, 150, 1.2)
#[1] "#4278B4"

brightness(55, 100, 150, c(0.8, 1.2))
#[1] "#2C5078" "#4278B4"

x <- rep(LETTERS[1:2], 5)
qplot(x = x, geom = "bar", fill = x) + 
  scale_fill_manual(values = brightness(55, 100, 150, c(0.5, 1.5)))

ここに画像の説明を入力

詳細について?rgb2hsvは、?hsvおよびwikiを参照してください。

編集:編集によると、色の名前と明るさの直接値を使用することを好むようです。その場合、ベクトル化された関数は非常に似ています。

# Usage: brightness("red", c(0.1, 0.3, 0.5, 1))
brightness <- function(rgbcol, v) {
  conv <- as.list(as.data.frame(t(rgb2hsv(col2rgb(rgbcol)))))
  conv[[3]] <- v
  do.call(hsv, conv)
}

set.seed(19)
df <- data.frame(a = rlnorm(100), b = 1:10, c = rep(LETTERS[1:10], each = 10))
ggplot(df, aes(x = b, y = a, fill = c)) + geom_area() + theme_bw() +
  scale_fill_manual(values = brightness("red", seq(0.1, 0.7, length = 10)))

ここに画像の説明を入力

于 2012-12-02T18:04:30.853 に答える