rggplot2scale-color-manual

ggplot, scale_colour_manual issues


Can anyone spot what is wrong in this code?

a <- c("Afghanistan"="darkgreen","Iraq"="red" ,"Mali"="green", "Nigeria"="purple","Senegal"="orange")

ggplot(data = full) + scale_colour_manual(values=a) + 
  geom_point(aes(x=Afghanistan_GDPpC, y=Afghanistan_AS), colour = "Afghanistan") +
  geom_smooth(aes(x=Afghanistan_GDPpC, y=Afghanistan_AS), colour = "Afghanistan", method = "lm") +
  geom_point(aes(x=Iraq_GDPpC, y=Iraq_AS), colour = "Iraq") +
  geom_smooth(aes(x=Iraq_GDPpC, y=Iraq_AS), colour = "Iraq", method = "lm") +
  geom_point(aes(x=Mali_GDPpC, y=Mali_AS), colour = "Mali") +
  geom_smooth(aes(x=Mali_GDPpC, y=Mali_AS), colour = "Mali", method = "lm") +
  geom_point(aes(x=Nigeria_GDPpC, y=Nigeria_AS), colour = "Nigeria") +
  geom_smooth(aes(x=Nigeria_GDPpC, y=Nigeria_AS), colour = "Nigeria", method = "lm") +
  geom_point(aes(x=Senegal_GDPpC, y=Senegal_AS), colour = "Senegal") + 
  geom_smooth(aes(x=Senegal_GDPpC, y=Senegal_AS), colour = "Senegal", method = "lm") +
  labs (x = "Log - GDP per Capita", y = "Log - Asylum Applications - First Time", colour = "Legend") +
  theme_classic()

This is the message I keep getting:

Error: Unknown colour name: Afghanistan

Here is the dataset: https://drive.google.com/file/d/1j5I6odeWxaAiJlc7dHtD-Qj42xuP-gMs/view?usp=sharing


Solution

  • I advise you to look at how ggplot and "grammar of graphics" works (here for example: https://ramnathv.github.io/pycon2014-r/visualize/ggplot2.html).

    So first you need to reshape your data to meet the requirements of ggplot:

    full <- full %>% pivot_longer(cols = ends_with(c("AS","GDPpC")), 
                      names_to = c("country", ".value"),
                      names_sep="_") %>% 
    rename("year" = "X1")
    

    The resulting tibble:

        # A tibble: 50 x 4
        year country        AS GDPpC
       <dbl> <chr>       <dbl> <dbl>
     1  2011 Mali         8.29  6.73
     2  2011 Nigeria      9.32  7.82
     3  2011 Senegal      7.54  7.22
     4  2011 Afghanistan  9.94  6.38
     5  2011 Iraq         9.43  8.71
     6  2012 Mali         7.75  6.66
     7  2012 Nigeria      8.56  7.91
     8  2012 Senegal      7.70  7.18
     9  2012 Afghanistan  9.90  6.46
    10  2012 Iraq         9.30  8.83
    # ... with 40 more rows
    

    Then you can use the ggplot correctly:

    ggplot(data = full, mapping = aes(x = GDPpC, y = AS, col = country))+
    geom_point()+
    scale_color_manual(values = c("Afghanistan"="darkgreen","Iraq"="red" ,"Mali"="green", "Nigeria"="purple","Senegal"="orange"))+
    geom_smooth(method = "lm")+
    labs (x = "Log - GDP per Capita", y = "Log - Asylum Applications - First Time", colour = "Legend") +
    theme_classic()