Home > Net >  Overwrite ggplot legend
Overwrite ggplot legend

Time:06-23

Here is my problem. I have this data.frame :

df = data.frame("group" = c("a", "a", "b", "b", "a", "a", "b", "b"),
            "jour" = c(rep(2, 4), rep(8, 4))   rep(c(- 0.25, - 0.25, 0.25, 0.25), 2),
            "value" = runif(8))

which gives :

df

from this I want to make a plot that look like this :

res

but with a legend for group a and group b (corresponding to red and blue colors).

If I do this :

ggplot(df, aes(x = jour, y = value, color = group))   geom_line(size = 1.5)  
    theme(legend.text = element_text(size = 16), legend.title = element_text(size = 16), axis.text = element_text(size = 16), axis.title = element_text(size = 16)) 

I get this :

res_bad

So I created a new variable pasting group and jour to remove the link between different jour, but now the legend is bad :

df$group_jour = paste(df$group, df$jour)

ggplot(df, aes(x = jour, y = value, color = group_jour))   geom_line(size = 1.5)   
    theme(legend.text = element_text(size = 16), legend.title = element_text(size = 16), axis.text = element_text(size = 16), axis.title = element_text(size = 16))  
    scale_color_manual(values = c("red", "red", "blue", "blue")) 

res_bad_2

How can I overwrite the legend to get only group a and group b and not group jour ?

This is a toy example, in practice I have a 10 different group and 4 different jour.

CodePudding user response:

Simply map jour on the group aes:

library(ggplot2)

ggplot(df, aes(x = jour, y = value, color = group, group = jour))   geom_line(size = 1.5)  
  theme(legend.text = element_text(size = 16), legend.title = element_text(size = 16), axis.text = element_text(size = 16), axis.title = element_text(size = 16))  
  scale_color_manual(values = c("red", "blue"))

  • Related