13.9 O pacote ggplot2

library(dplyr)
library(ggplot2)

1. O que acontece quando rodamos o código ggplot(data = mtcars)?

A função ggplot() cria o nosso canvas, um quadro em branco onde vamos colocar todas as outras camadas do gráfico. Dentro do R, isso corresponde a uma lista com as informações necessárias para a criação do gráfico. Cada camada adicionada ao ggplot adiciona mais informações nessa lista. No exemplo acima, como passamos a base mtcars para a função ggplot(), a base mtcars é guardada dentro dessa lista, e será utilizada quando mapearmos variáveis ao gráfico.


2. O que tem de errado no código abaixo? Por que os pontos não ficaram azuis?

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))

Quando queremos definir o valor de um atributo estético, fazemos isso fora da função aes(). Usamos a função aes() apenas para mapear variáveis aos atributos estéticos do gráfico. O correto seria:

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue")


3. Mapeie uma variável contínua para a cor, o tamanho e a forma de um gráfico de pontos. Como esses atributos estéticos se comportam diferente para variáveis categóricas vs contínuas?

# Cor (var continua)
mtcars %>% 
  ggplot() +
  geom_point(aes(y = mpg, x = wt, color = carb))

# Cor (var discreta)
mtcars %>% 
  mutate(carb = as.character(carb)) %>% 
  ggplot() +
  geom_point(aes(y = mpg, x = wt, color = carb))

# Tamanho (var continua)
mtcars %>% 
  ggplot() +
  geom_point(aes(y = mpg, x = wt, size = carb))

# Tamanho (var discreta)
mtcars %>% 
  mutate(carb = as.character(carb)) %>% 
  ggplot() +
  geom_point(aes(y = mpg, x = wt, size = carb))
## Warning: Using size for a discrete variable is not advised.

# Forma (var continua)
# Não pode ser utilizada com variável contínua
mtcars %>% 
  ggplot() +
  geom_point(aes(y = mpg, x = wt, shape = carb))
## Error in `scale_f()`:
## ! A continuous variable can not be mapped to shape

# Forma (var discreta)
mtcars %>% 
  mutate(carb = as.character(carb)) %>%
  ggplot() +
  geom_point(aes(y = mpg, x = wt, shape = carb))


4. Utilizando o mtcars, faça um gráfico de dispersão de mpg por qsec.

mtcars %>% 
  ggplot() +
  geom_point(aes(y = mpg, x = qsec))


5. Utilizando o mtcars, o que acontece se você fizer um gráfico de dispersão de vs por mpg? Qual gráfico seria melhor para representar esses dados?

mtcars %>% 
  ggplot(aes(y = mpg, x = vs)) +
  geom_point()

Como os pontos ficam sobrepostos, um boxplot seria mais interessante nesse caso pois nos dá uma visão melhor da distribuição da variável mpg para cada categoria da variável vs.

mtcars %>% 
  mutate(vs = as.character(vs)) %>% 
  ggplot(aes(y = mpg, x = vs)) +
  geom_boxplot()


Para resolver os exercícios a seguir, utilize a base imdb.

6. Crie um gráfico de dispersão da nota do imdb pelo orçamento.

imdb %>% 
  ggplot(aes(y = nota_imdb, x = orcamento)) +
  geom_point()
## Warning: Removed 4951 rows containing missing values (geom_point).


7. Faça um gráfico de linhas do orçamento médio dos filmes ao longo dos anos.

imdb %>% 
  group_by(ano) %>% 
  summarise(orcamento_medio = mean(orcamento, na.rm = TRUE)) %>% 
  ggplot(aes(x = ano, y = orcamento_medio)) +
  geom_line()
## Warning: Removed 1 row(s) containing missing values (geom_path).


8. Transforme o gráfico do exercício anterior em um gráfico de barras.

imdb %>% 
  group_by(ano) %>% 
  summarise(orcamento_medio = mean(orcamento, na.rm = TRUE)) %>% 
  ggplot(aes(x = ano, y = orcamento_medio)) +
  geom_col()
## Warning: Removed 2 rows containing missing values (position_stack).


9. Descubra quais são as 5 produtoras (como a Walt Disney Animation Studios e a Walt Disney Pictures) que mais aparecem na coluna producao e faça um boxplot do lucro dos filmes dessas produtoras.

top_5_produtoras <- imdb %>% 
  count(producao) %>% 
  slice_max(order_by = n, n = 5) %>% 
  pull(producao)

imdb %>% 
  filter(producao %in% top_5_produtoras) %>% 
  mutate(lucro = receita - orcamento) %>% 
  ggplot(aes(y = producao, x = lucro)) +
  geom_boxplot()
## Warning: Removed 1252 rows containing non-finite values (stat_boxplot).


10. Com base no código abaixo, resolva os itens a seguir.

diretores <- c(
  "Steven Spielberg", 
  "Quentin Tarantino", 
  "Robert Zemeckis",
  "Martin Scorsese"
)

imdb %>% 
  filter(direcao %in% diretores) %>% 
  group_by(ano, direcao) %>% 
  summarise(nota_media = mean(nota_imdb, na.rm = TRUE)) %>% 
  ggplot(aes(x = ano, y = nota_media)) +
  geom_point() +
  geom_line() +
  facet_wrap(vars(direcao))
## `summarise()` has grouped output by 'ano'. You can override using the `.groups`
## argument.

a. Analisando o gráfico gerado, descreva o que a função facet_wrap() faz.

A função facet_wrap() replica o gráfico especificado para cada categoria de uma coluna.

b. Utilize os argumentos nrow e ncol da função facet_wrap() para colocar os quatro gráficos em uma única coluna.

imdb %>% 
  filter(direcao %in% diretores) %>% 
  group_by(ano, direcao) %>% 
  summarise(nota_media = mean(nota_imdb, na.rm = TRUE)) %>% 
  ggplot(aes(x = ano, y = nota_media)) +
  geom_point() +
  geom_line() +
  facet_wrap(vars(direcao), ncol = 1)
## `summarise()` has grouped output by 'ano'. You can override using the `.groups`
## argument.


11. Resovla os itens a seguir para fazer um gráfico de barras da frequência de filmes com nota maior que 8 ao longo dos anos.

a. Crie uma nova coluna na base IMDB indicando se a nota de um filme é maior que 8 ou não.

imdb_notas_8 <- imdb %>%
  mutate(nota_maior_que_8 = ifelse(nota_imdb > 8, "Nota maior que 8", "Nota menor que 8"))

b. b. Utilizando a coluna criada em (a) crie uma tabela com o número anual de filmes com nota maior 8.

tabela <- imdb_notas_8 %>%
  filter(nota_maior_que_8 == "Nota maior que 8") %>%
  count(ano)

tabela
## # A tibble: 74 × 2
##      ano     n
##    <dbl> <int>
##  1  1921     1
##  2  1923     1
##  3  1924     2
##  4  1925     1
##  5  1926     1
##  6  1927     1
##  7  1928     2
##  8  1931     1
##  9  1932     1
## 10  1934     1
## # … with 64 more rows

c. Utilize a tabela criada em (b) para fazer um gráfico de barras do número de filmes com nota maior que 8 ao longo dos anos.

tabela %>%
  ggplot(aes(x = ano, y = n)) +
  geom_col()


Curso-R