Ivan Cereghetti
Ivan Cereghetti

Reputation: 300

Change the color of only one line

I have a datarame like this:

datos[1:20,]
# A tibble: 20 x 4
  country_name country_code year  value
1 Argentina    ARG          1990  1    
2 Bolivia      BOL          1990  1    
3 Brazil       BRA          1990  1    
4 Chile        CHL          1990  1    
5 Colombia     COL          1990  1    
6 Ecuador      ECU          1990  1    
7 Paraguay     PRY          1990  1    
8 Peru         PER          1990  1    
9 Uruguay      URY          1990  1    
10 Argentina    ARG          1991  1.08 
11 Bolivia      BOL          1991  1.03 
12 Brazil       BRA          1991  0.997
13 Chile        CHL          1991  1.06 
14 Colombia     COL          1991  1.00 
15 Ecuador      ECU          1991  1.02 
16 Paraguay     PRY          1991  1.01 
17 Peru         PER          1991  1.00 
18 Uruguay      URY          1991  1.03 
19 Argentina    ARG          1992  1.15 
20 Bolivia      BOL          1992  1.03 

And I have a chart like this.

grafico<- ggplot(datos,aes(x=year,y=value,group=country_name, color = 
country_name,label=country_code)) + 
  geom_line(size=1.25,color=gris) + 
  geom_point(color=gris)+
  geom_text(data = . %>% group_by(country_name) %>% filter(year==max(year)), 
          nudge_x=0.1, hjust=0.5,vjust=(-0.5),color=gris) +
  expand_limits(x = as.numeric(max(datos$year))-as.numeric(min(datos$year))+1) +
  guides(colour=FALSE)+
  scale_x_discrete(breaks=c(1990,1995,2000,2005,2010,2015,2019))

enter image description here

There is any way I can have a different color line for Argentina than the other ones?

Upvotes: 0

Views: 191

Answers (1)

Duck
Duck

Reputation: 39585

You can try with a dataframe for the colors and then assign them with scale_color_manual():

library(tidyverse)
#Data
datos <- structure(list(country_name = c("Argentina", "Bolivia", "Brazil", 
"Chile", "Colombia", "Ecuador", "Paraguay", "Peru", "Uruguay", 
"Argentina", "Bolivia", "Brazil", "Chile", "Colombia", "Ecuador", 
"Paraguay", "Peru", "Uruguay", "Argentina", "Bolivia"), country_code = c("ARG", 
"BOL", "BRA", "CHL", "COL", "ECU", "PRY", "PER", "URY", "ARG", 
"BOL", "BRA", "CHL", "COL", "ECU", "PRY", "PER", "URY", "ARG", 
"BOL"), year = c(1990L, 1990L, 1990L, 1990L, 1990L, 1990L, 1990L, 
1990L, 1990L, 1991L, 1991L, 1991L, 1991L, 1991L, 1991L, 1991L, 
1991L, 1991L, 1992L, 1992L), value = c(1, 1, 1, 1, 1, 1, 1, 1, 
1, 1.08, 1.03, 0.997, 1.06, 1, 1.02, 1.01, 1, 1.03, 1.15, 1.03
)), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", 
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"
), class = "data.frame")

Code:

#Create data palette
dfcolors <- data.frame(vec = unique(datos$country_name),color='gray',stringsAsFactors = F)
#Change color
dfcolors$color[dfcolors$vec=='Argentina']<-'blue'
#Plot
ggplot(datos,aes(x=factor(year),y=value,group=country_name, color = 
                   country_name,label=country_code)) + 
  geom_line(size=1.25) + 
  geom_point()+
  geom_text(data = . %>% group_by(country_name) %>% filter(year==max(year)), 
            nudge_x=0.1, hjust=0.5,vjust=(-0.5)) +
  expand_limits(x = as.numeric(max(datos$year))-as.numeric(min(datos$year))+1) +
  guides(colour=FALSE)+
  scale_color_manual(values = dfcolors$color,labels=dfcolors$vec)

Output:

enter image description here

Upvotes: 1

Related Questions