You can try:
COL <- c("red", "blue", "green")
p1 <- ggplot(iris, aes(Sepal.Length, Sepal.Width, col = Species))+
geom_point()
p1 <- p1 + scale_colour_manual(values = COL)
Now darken your color using col2rgband rgb( source ) or another approach
COL2 <- col2rgb(COL)
COL2 <- COL2/2
COL2 <- rgb(t(COL2), maxColorValue=255)
Mark the tags.
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()
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
}
p1 + geom_text(aes(label = Sepal.Length), col=darken(p1, 2), size = 2, position = position_dodge(width = 0.2))
p1 + geom_text_repel(aes(label = Sepal.Length), col= darken(p1, 2), size = 2)