yaennu
yaennu

Reputation: 85

manual color assignment of a legend object in ggplot2

This is my code:

library(data.table)
library(ggplot2)

clist <- list(c(1:39), c(2:40), c(3:41))
clist.ts <- lapply(clist, function(x) ts(x, frequency = 1, start = 1978))
ind78_ymean_tsdf <- as.data.frame(clist.ts)
names(ind78_ymean_tsdf) <- c("name1", "name2", "name3")
ind78_ymean_tsdf$"Year" <- c(1978:2016)

setDT(ind78_ymean_tsdf) 
ind78_ymean_melt <- melt(ind78_ymean_tsdf, id=c("Year")) 

(ggplot(ind78_ymean_melt, aes(x=Year, y=value, color=variable)) 
  + geom_line()
  + geom_line(data=subset(ind78_ymean_melt, variable == "name1"), colour="black", size=1.5)
  + labs(title="Development of the indices", x="Year", y="Index") 
  + scale_color_discrete(name="Individual replications")  
  + theme_light()) 
  # + guides(colour=guide_legend(override.aes=list(colour=c(hue_pal()(11)[1:10], "black"), size=c(rep(1, 10), 1.5))))

It is basically the same as in the following question, but with a reproducible example: manual color assignment

My problem is now, that I don't know how I had to change the following line in order to get the entry in the legend of the plot also black:

guides(colour=guide_legend(override.aes=list( colour=c(hue_pal()(11)[1:10], "black"), size=c(rep(1, 10), 1.5))))

Maybe someone could explain what the parameters in the line above mean or could post the question to the link above, because I have not enough street cred. to do so.. :) I have 13 variables in the real plot (not in the reproducible example above) if that helps. Thanks in advance!

Upvotes: 0

Views: 748

Answers (2)

pogibas
pogibas

Reputation: 28379

Your solution looks overcomplicated. Why don't you simply scale_color_manual and scale_size_manual.

ggplot(ind78_ymean_melt, aes(Year, value, color = variable, size = variable)) +
    geom_line() +
    labs(title = "Development of the indices", 
         x = "Year", 
         y = "Index",
         color = "Individual replications") +
    scale_color_manual(values = c("black", hue_pal()(2))) +
    scale_size_manual(values = c(1.5, rep(0.5, 2))) +
    theme_light() +
    guides(size = FALSE)

enter image description here

Upvotes: 1

yaennu
yaennu

Reputation: 85

This is the solution from @drmariod:

(ggplot(ind78_ymean_melt, aes(x=Year, y=value, color=variable), size=2) 
  + geom_line()
  + geom_line(data=subset(ind78_ymean_melt, variable == "name3"), colour="black", size=1.5)
  + labs(title="Development of the indices", x="Year", y="Index") 
  + scale_color_discrete(name="Individual replications")  
  + theme_light()
  + guides(colour=guide_legend(override.aes=list( colour=c(hue_pal()(2), "black"), size=c(rep(1, 2), 1.0)))) ) 

And the explanation of the last code line: the hue_pal()(11) creates 11 colours from the hue palette but it chooses only color 1:10 and adds a black color to it.

Upvotes: 0

Related Questions