Atribuição de cores em um gráfico com ggplot2

Essa pergunta foi enviada na aula sobre ggplot2, no curso R para Ciência de Dados I.

Seria possível atribuir uma cor para quando o gráfico subisse e outra cor para quando caísse?

Contexto do código na aula:

# Carregar pacotes --------------------------------------------------------

library(tidyverse)

# Ler base IMDB -----------------------------------------------------------

imdb <- readr::read_csv("https://raw.githubusercontent.com/curso-r/main-r4ds-1/master/dados/imdb.csv")
#> 
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#>   titulo = col_character(),
#>   ano = col_double(),
#>   diretor = col_character(),
#>   duracao = col_double(),
#>   cor = col_character(),
#>   generos = col_character(),
#>   pais = col_character(),
#>   classificacao = col_character(),
#>   orcamento = col_double(),
#>   receita = col_double(),
#>   nota_imdb = col_double(),
#>   likes_facebook = col_double(),
#>   ator_1 = col_character(),
#>   ator_2 = col_character(),
#>   ator_3 = col_character()
#> )

imdb <- imdb %>% mutate(lucro = receita - orcamento)


# Nota média do Robert De Niro por ano
imdb %>% 
  filter(ator_1 == "Robert De Niro") %>% 
  group_by(ano) %>% 
  summarise(nota_media = mean(nota_imdb, na.rm = TRUE)) %>% 
  ggplot() +
  geom_line(aes(x = ano, y = nota_media))

Created on 2021-03-13 by the reprex package (v1.0.0)

1 Curtida

Olá!

Essa foi a forma em que pensei para resolver:

# Carregar pacotes --------------------------------------------------------

library(tidyverse)

# Ler base IMDB -----------------------------------------------------------

imdb <- readr::read_csv("https://raw.githubusercontent.com/curso-r/main-r4ds-1/master/dados/imdb.csv")
#> 
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#>   titulo = col_character(),
#>   ano = col_double(),
#>   diretor = col_character(),
#>   duracao = col_double(),
#>   cor = col_character(),
#>   generos = col_character(),
#>   pais = col_character(),
#>   classificacao = col_character(),
#>   orcamento = col_double(),
#>   receita = col_double(),
#>   nota_imdb = col_double(),
#>   likes_facebook = col_double(),
#>   ator_1 = col_character(),
#>   ator_2 = col_character(),
#>   ator_3 = col_character()
#> )
imdb <- imdb %>% mutate(lucro = receita - orcamento)


imdb_inclinacao <- imdb %>% 
  filter(ator_1 == "Robert De Niro") %>% 
  group_by(ano) %>% 
  summarise(nota_media = mean(nota_imdb, na.rm = TRUE)) %>% 

# Criar uma variável com a inclinação

  mutate(proxima_nota_media = dplyr::lead(nota_media),
         inclinacao = case_when(
           nota_media < proxima_nota_media ~ "subindo",
           TRUE ~ "descendo")) 


imdb_inclinacao
#> # A tibble: 26 x 4
#>      ano nota_media proxima_nota_media inclinacao
#>  * <dbl>      <dbl>              <dbl> <chr>     
#>  1  1973        7.4                9   subindo   
#>  2  1974        9                  8.3 descendo  
#>  3  1976        8.3                6.7 descendo  
#>  4  1977        6.7                8.3 subindo   
#>  5  1980        8.3                7.9 descendo  
#>  6  1987        7.9                7.6 descendo  
#>  7  1988        7.6                6   descendo  
#>  8  1989        6                  8.7 subindo   
#>  9  1990        8.7                7.3 descendo  
#> 10  1991        7.3                8.2 subindo   
#> # … with 16 more rows

# Usar a variavel da inclinacao para colorir a linha do gráfico

imdb_inclinacao %>% 
  ggplot() +
  geom_line(aes(x = ano, y = nota_media, color = inclinacao, group = 1)) +
  scale_color_manual(values = c("red", "darkgreen")) +
  theme_bw()

Created on 2021-03-13 by the reprex package (v1.0.0)

3 Curtidas

Parabens @beatrizmilz! Curti muito a sua solucao! Abs e sucesso

Por que foi usado o argumento group = 1 no geom_line?
Obrigado.

Eduardo, sem esse argumento, o gráfico estaria incorreto pois quebraria a mesma informação em duas linhas separadas.
Exemplo:

Portanto, usando group = 1, estamos sendo explícitos que os dados fazem parte de apenas um grupo, deixando tudo em uma única linha!

oLIKsbp

1 Curtida