brewer.pal(n=8,name="Paired")
可以创建多达八个颜色对,但只有少数这些颜色是良好的印刷。 是否有会产生暗吊坠更灵活的功能? 较深的人应
是否有一个colourbrewer工具,已经可以解决了吗?
> 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))
}
这里是一个矢量化功能,您可以使用。 我们的想法是将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
和维基的更多细节。
编辑:根据您的编辑似乎你更喜欢使用的颜色和亮度的直接值名称。 在这种情况下,量化的功能看起来非常相似:
# 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)))