Essa pergunta foi enviada na aula sobre ggplot2, no curso R para Ciência de Dados I.
Como destacaria apenas uma barra com alguma cor?
# 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)
# Número de filmes dos diretores da base
imdb %>%
filter(!is.na(diretor)) %>%
count(diretor) %>%
top_n(10, n) %>%
ggplot() +
geom_col(aes(y = diretor, x = n))
Created on 2021-03-13 by the reprex package (v1.0.0)
Olá!
Para responder, vamos imaginar que queremos destacar apenas o Tim Burton. E a cor escolhida é roxo!
Uma forma de resolver é:
- Criar uma variável que indica qual diretor deve ser colorido ou não.
- Usar essa variável para colorir no aesthetics fill.
- Esconder a legenda criada, pois nesse caso ela não agrega.
- E usar uma escala manual para indicar a cor que queremos pintar.
Segue o código:
# 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)
# Número de filmes dos diretores da base
imdb %>%
filter(!is.na(diretor)) %>%
count(diretor) %>%
top_n(10, n) %>%
# Criar uma variável que indica qual (ou quais) diretor deve ser colorido
mutate(diretor_colorido = case_when(diretor == "Tim Burton" ~ TRUE,
TRUE ~ FALSE)) %>%
ggplot() +
# Colorir usando a variável criada
geom_col(aes(y = diretor, x = n, fill = diretor_colorido)) +
# Esconder a legenda
theme(legend.position = "none") +
# Criar a escala de cores: quero deixar o Tim em roxo!
scale_fill_manual(values = c("darkgray", "purple"))
Created on 2021-03-13 by the reprex package (v1.0.0)
1 curtida
Você também pode usar o pacote {gghighlight}
: 8.2 Extensões do pacote ggplot2 | Ciência de Dados em R
library(tidyverse)
imdb <- readr::read_csv("https://raw.githubusercontent.com/curso-r/main-r4ds-1/master/dados/imdb.csv")
imdb %>%
mutate(lucro = receita - orcamento) %>%
filter(!is.na(diretor)) %>%
count(diretor) %>%
top_n(10, n) %>%
ggplot() +
# Colorir usando a variável criada
geom_col(
aes(y = diretor, x = n),
fill = "purple"
) +
gghighlight::gghighlight(diretor == "Tim Burton")
Created on 2021-03-15 by the reprex package (v0.3.0)
2 curtidas
marrut
4
Não conhecia este recurso. Muito legais as soluções.