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)
2 curtidas
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)
4 curtidas
Parabens @beatrizmilz! Curti muito a sua solucao! Abs e sucesso
Por que foi usado o argumento group = 1
no geom_line?
Obrigado.
1 curtida
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!
2 curtidas