你可以试试:
# specify your colour
COL <- c("red", "blue", "green")
p1 <- ggplot(iris, aes(Sepal.Length, Sepal.Width, col = Species))+
geom_point()
p1 <- p1 + scale_colour_manual(values = COL)
现在变暗使用col2rgb
和rgb
(source)你的颜色或其他approach
COL2 <- col2rgb(COL)
COL2 <- COL2/2 # you can use of course other values than 2. Higher values the darker the output.
COL2 <- rgb(t(COL2), maxColorValue=255)
情节的标签。
p1 + geom_text(aes(label = Sepal.Length), col=factor(iris$Species, labels=COL2), size = 2, position = position_dodge(width = 0.2))
为了更好地浏览我推荐使用geom_text_repel
。值得注意的是,你必须使用as.character
。
require(ggrepel)
p1 + geom_text_repel(aes(label = Sepal.Length), size = 2, col= as.character(factor(iris$Species, labels=COL2)))
如果你不想在指定开始时的颜色,你也可以使用原始ggplot颜色提取:
g <- ggplot_build(p1)
COL <- unlist(unique(g$data[[1]]["colour"]))
然后你使用上面的代码较暗的文本颜色或将所有内容组合在一个较暗的功能中:
p1 <- ggplot(iris, aes(Sepal.Length, Sepal.Width, col = Species))+
geom_point()
# function
darken <- function(Plot, factor=1.4){
g <- ggplot_build(Plot)
color <- unlist((g$data[[1]]["colour"]))
col <- col2rgb(color)
col <- col/factor
col <- rgb(t(col), maxColorValue=255)
col
}
# basic text
p1 + geom_text(aes(label = Sepal.Length), col=darken(p1, 2), size = 2, position = position_dodge(width = 0.2))
# repel text
p1 + geom_text_repel(aes(label = Sepal.Length), col= darken(p1, 2), size = 2)
一个简单的黑客是改变'geom_point(阿尔法= 0.5)',这将使点显示“轻”,但它不是改变亮度相同,我觉得 – adibender
这是一个很好速战速决 - 谢谢。我不得不添加'geom_point(alpha = 0.5,shape = 16)'来防止该点出现黑色边框。 –