Nessa aula, iremos explorar o conjunto de dados mpg disponível no R. Esse conjunto de dados nos ajuda a responder a seguinte questão: carros com motores maiores utilizam mais combustível do que carros com motores menores? Essa aula é baseada no livro “R para Data Sciente”.
Para começar, devemos explorar este conjunto de dados. Você pode fazer isso da mesma forma mostrada nas aulas anteriores.
library(ggplot2)
data(mpg)
head(mpg)
## # A tibble: 6 x 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa~
## 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa~
## 3 audi a4 2 2008 4 manual(m6) f 20 31 p compa~
## 4 audi a4 2 2008 4 auto(av) f 21 30 p compa~
## 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa~
## 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compa~
tail(mpg)
## # A tibble: 6 x 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 volkswagen passat 1.8 1999 4 auto(l5) f 18 29 p mids~
## 2 volkswagen passat 2 2008 4 auto(s6) f 19 28 p mids~
## 3 volkswagen passat 2 2008 4 manual(m6) f 21 29 p mids~
## 4 volkswagen passat 2.8 1999 6 auto(l5) f 16 26 p mids~
## 5 volkswagen passat 2.8 1999 6 manual(m5) f 18 26 p mids~
## 6 volkswagen passat 3.6 2008 6 auto(s6) f 17 26 p mids~
summary(mpg)
## manufacturer model displ year
## Length:234 Length:234 Min. :1.600 Min. :1999
## Class :character Class :character 1st Qu.:2.400 1st Qu.:1999
## Mode :character Mode :character Median :3.300 Median :2004
## Mean :3.472 Mean :2004
## 3rd Qu.:4.600 3rd Qu.:2008
## Max. :7.000 Max. :2008
## cyl trans drv cty
## Min. :4.000 Length:234 Length:234 Min. : 9.00
## 1st Qu.:4.000 Class :character Class :character 1st Qu.:14.00
## Median :6.000 Mode :character Mode :character Median :17.00
## Mean :5.889 Mean :16.86
## 3rd Qu.:8.000 3rd Qu.:19.00
## Max. :8.000 Max. :35.00
## hwy fl class
## Min. :12.00 Length:234 Length:234
## 1st Qu.:18.00 Class :character Class :character
## Median :24.00 Mode :character Mode :character
## Mean :23.44
## 3rd Qu.:27.00
## Max. :44.00
Utilize a ajuda do R para explorar as variáveis deste banco de dados.
?mpg
Para responder a nossa pergunta inicial, vamos começar fazendo um gráfico de dispersão entre as variáveis displ (tamanho do motor de um carro em litros) x hwy (eficiência do combustível de um carro na estrada em milhas por galão).
Lembrando que para começar um gráfico sempre usamos a função ggplot(), que vai criar um sistema de coordenadas onde poderemos adicionar camadas. E o primeiro argumento dessa função é o conjunto de dados que iremos usar no gráfico. Após isso, iremos completar o gráfico adicionando camadas de pontos, no caso do gráfico de dispersão, geom_point().
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
O gráfico nos mostra uma possível relação negativa entre eficiência e tamanho do motor. Porém, temos um conjunto de pontos discrepantes, que parecem estar longe de uma reta negativamente inclinada traçada para esse conjunto de pontos. Lembram-se como podemos inserir essa reta? Vejamos abaixo:
ggplot(data = mpg, aes(x = displ, y = hwy)) +
geom_point()+geom_smooth(method = "lm")
## `geom_smooth()` using formula 'y ~ x'
OBSERVAÇÃO IMPORTANTE: Note que o aes() está sendo usado diretamente na função ggplot() e não no objeto geométrico. Que o mapeamento estético definido na função ggplot() é global. Ou seja, é aplicado para todos os objetos geométricos daquele gráfico, a menos que seja explicitado novamente em alguma camada.
Uma possível explicação para isso pode ser a existência de modelos híbridos no banco de dados. A variável class desse conjunto de dados classifica os carros em : compacto, médio e SUV. Como na época desse conjunto de dados, apenas carros pequenos eram híbridos, podemos usar essa variável para verificar a hipótese. Vamos então usar a variável class diferenciando os pontos por cores de acordo com essa variável. Note que fazemos isso usando dentro da função aes() o argumento color = class.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))
Podemos também usar o comando alpha = class para diferenciar as classes usando a transparência dos pontos (o que não é uma boa idéia quando temos muitas classes):
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, alpha = class))
## Warning: Using alpha for a discrete variable is not advised.
Ou ainda pelo formato dos pontos, usando shape= class:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, shape = class))
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 7. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 62 rows containing missing values (geom_point).
De acordo com os gráficos, os pontos “aberrantes” não parecem ser híbridos, mas sim esportivos. _____________________________________________________________________
O recurso FACETS:
gráficos construídos sobre um mesmo data frame mas separados por variáveis categóricas
Podemos dividir os nossos gráficos em “facetas” ou subplots. Para fazer isso, podemos usar facet_wrap(), que criará subplots a partir de uma única variável, que deve ser discreta. Vamos fazer vários gráficos de dispersão para cada conjunto de classe de carros. Portanto, usaremos facet_wrap(~class). Podemos também definir quantas linhas serão usadas, ou quantas colunas. Vamos acrescentar nrow=2, para que os subplots sejam divididos em duas linhas.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, nrow = 2)
Se quisermos duas colunas, substituímos por ncol=2:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, ncol=2)
Para criar facetas (subplots) a partir de duas variáveis, usamos facet_grid(). Nesse caso, é preciso indicar duas variáveis para fazer o grid.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ cyl)
TEMAS
Através da função theme() podemos modificar a aparência de um gráfico. Vamos usar o theme_dark().
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ cyl) + theme_dark()
E agora theme_linedraw(). Vc pode explorar os diferentes temas disponíveis.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) + theme_linedraw()
_____________________________________________________________
MÚLTIPLOS GRÁFICOS POR PÁGINAS
Diferente do comando facets(), agora nosso objetivo é colocar vários gráficos indepenentes separados em subplots e não dividí-los de acordo com uma variável categórica. Fora do ggplot, faríamos isso usando layout() e mfrow(). No ggplot, faremos usando da função grid.arrange(). Precisaremos instalar e carregar o pacote gridExtra.
#install.packages("gridExtra")
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.1.3
Agora faremos 3 gráficos
p1 <- ggplot(data=mpg, aes(x=displ)) + geom_bar(fill='blue')
p2 <- ggplot(data=mpg, aes(x=displ)) + geom_boxplot()
p3 <- ggplot(data=mpg, aes(x=displ, y=hwy)) + geom_point(color="red")
grid.arrange(p1, p2, p3, ncol=2)