1 ggplot2

Trata-se de um pacote originalmente do R, para visualização de dados e faz parte da biblioteca Tidyverse, popular em análise de dados e machine learning. Hadley Wickham, cientista chefe do RStudio, e professor de estatística na Universidade de Auckland, Stanford University e Rice University, desenvolveu o ggplot2 baseado no livro (The Grammar of Graphics), de Leland Wilkinson.

O pacote possui distintas funções que podem exigir vários minicursos ou horas, por isso, vamos explorar as mais básicas nesse momento:

ggplot( ) indicamos o dataset

aes( ) indicando as variáveis dos eixos e as características que desejamos: cor, forma, tamanho

geom( ) definindo o tipo de gráfico mais adequado:

geom_point( ) – dispersão.

geom_histogram( ) – histogramas.

geom_abline( ) – retas.

geom_boxplot( ) – boxplot.

geom_bar( ) – barras/colunas.

Na aula prática vamos uar o dataset mpg embutido no pacote ggplot2

Instale os pacotes, caso ainda não os tenha instalado em seu pc. Lembre-se, instalamos 1 vez na máquina. No entanto, devemos ativá-lo na biblioteca toda vez que formos utilizá-lo.

library(ggplot2) # graficos
library(dplyr) # utilizaremos para manipular a base de dados
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(forcats) # ordenar colunas

Visualizando o banco no console

ggplot2::mpg
## # A tibble: 234 × 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… f        18    29 p     comp…
##  2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
##  3 audi         a4           2    2008     4 manu… f        20    31 p     comp…
##  4 audi         a4           2    2008     4 auto… f        21    30 p     comp…
##  5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
##  6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
##  7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
##  8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
##  9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
## 10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
## # … with 224 more rows

Formato de um conjunto de dados:

Data frame com 234 linhas e 11 variáveis

Mais detalhes: https://rpubs.com/shailesh/mpg-exploration

As variáveis:

1 fabricante = (manufacturer)

2 modelo = nome do modelo (model)

3 displ = cilindrada do motor, em litros ou tamanho do motor

4 ano = ano de fabricação

5 cyl = número de cilindros

6 trans = tipo de transmissão (automatico, manual (vários sub tipos))

7 drv f = tração dianteira, r = tração traseira, 4 = tração nas quatro rodas

8 cty = milhas urbanas por galão

9 hwy = milhas rodoviárias por galão ou eficiência

10 fl = tipo de combustível (São eles: diesel, petroleo, eletrico, etc.)

11 classe = “tipo” de carro (class)

2 Visualização dos dados usando ggplot2

Vamos utilizar os seguintes gráficos com o dataset mpg:

geom_point = dispersão

geom_bar = barras

geom_boxplot = boxplot

geom_density = densidade

geom_histogram = histograma

2.1 Dispersão

Vamos tentar visualizar a relação entre tamanho do motor (displ) e eficiência do carro (hwy)

ggplot2::ggplot(data = mpg) + #data = base de dados (nome do objeto)
  aes(x=displ, y= hwy) + #aes = variáveis
   geom_point() #tipo de gráfico

Ao que tudo indica quanto maior for o tamanho do motor, menor eficiência do carro, logo são inversamente proporcionais. E se eu quiser mudar a cor dos pontos?

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

Visualizando de outra maneira: Vamos ver essa relação para cada ano de fabricação É possível abrir uma nova janela com windows()

ggplot(data = mpg) +
  aes(x=displ, y=hwy) +
  geom_point() +
  facet_wrap(.~year) #visualização em dois quadrantes (pois tenho 2 anos distintos)

Nesse gráfico inserimos a camada facet_wrap usada para visualização em pequenos painéis por tamanho do motor e eficiência entre 1999 e 2008, de um modo geral os carros apresentaram melhor eficiência em 2008 comparado a 1999.

Vamos criar um gráfico de dispersão entre displ e hwy, e o tamanho dos pontos será proporcional ao valor da variável cyl (número de cilindros) essa figura será guardada no objeto p

p <- ggplot(data = mpg) +
  aes(x = displ, y = hwy, size = cyl) + # usamos argumento size
  geom_point()

Podemos adicionar um título,subtítulo, legenda e editar os títulos dos eixos com a função labs ( ):

p + labs(
  title = "Fuel efficiency for 38 popular models of car",
  subtitle = "Period 1999-2008",
  caption = "Data: ggplot2::mpg. See more at www.statsandr.com",
  x = "Engine displacement (litres)",
  y = "Highway miles per gallon (mpg)",
  size= "Nº of cylinders"
)

E se eu quiser ver a relação cilindrada do motor x eficiencia conseguindo ver por número de cilindros?

ggplot(data = mpg) +
  aes(x = displ, y = hwy, colour = factor(cyl)) + # colocando cor por número de cilindros
  geom_point()

Não gostei dessas cores. Quero mudar! Vamos usar a paleta brewer:

library(RColorBrewer)
#display.brewer.all()

ggplot(data = mpg) +
  aes(x = displ, y = hwy, colour = factor(cyl)) + # colocando cor por número de cilindros
  geom_point() +
  scale_color_brewer(palette="Set3")

Vejam mais cores em https://r-graph-gallery.com/38-rcolorbrewers-palettes.html

2.2 Barras

Não se preocupem agora com a ordem Vamos ver a distribuição do tipo de tração (drv) legenda: f=front wheel, r=rear wheel, 4=4 wheel

ggplot(data = mpg) +
  aes(x = drv) +
  geom_bar()

Vejam mais cores em http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

Alterando as cores das bordas

ggplot(data = mpg) +
  aes(x = drv) +
  geom_bar(color = "red")

Cor interior

ggplot(data = mpg) +
  aes(x = drv) +
  geom_bar(color = "red", fill = "white")

Ambas

ggplot(data = mpg) +
  aes(x = drv) +
  geom_bar(color ="purple", fill = "purple")

Outra variável:

ggplot (data = mpg) +
  aes (x = class) +  # tipo do carro
  geom_bar ()

Ordenando as colunas com fct_infreq (por frequencia; pacote forcats)

ggplot(data = mpg) +
  aes (x = fct_infreq(class)) + 
  geom_bar()

Inserindo cores

ggplot(data = mpg) +
  aes(x = fct_infreq(class)) +
  geom_bar(fill = "red")

Iserindo os dados na horizontal (barras)

ggplot(data = mpg) +
  aes(x = fct_infreq(class)) +
  geom_bar(fill = "tomato") +
  coord_flip() # este comando faz o gráfico de coluna, virar barra

Distribuicao do tipo de carro e inserindo cores por ano

ggplot(data = mpg) +
  aes (x = class, fill = factor(year)) +
  geom_bar()

Um gráfico de coluna para tração segundo modelo com titulo e afins

ggplot(data = mpg) +
  aes (x = fct_infreq(drv), fill = class) +
  geom_bar() + 
  labs(
    title = "Tipo de tração por modelo",
    subtitle = "Periodo 1999-2008",
    caption = "Data: ggplot2::mpg. Explore em www.statsandr.com",
    x = "Tração",
    y = "Frequência",
    fill = "Modelo"
  )

E se eu quiser do menor para maior? use o argumento fct_rev

ggplot(data = mpg) +
  aes (x = fct_rev(fct_infreq(drv))) +
  geom_bar()

Podemos transformar (recodificar) a variável tração: verificando a classe e levels

class(mpg$drv)
## [1] "character"
table(mpg$drv)
## 
##   4   f   r 
## 103 106  25

Levels: 7 drv

f = tração dianteira

r = tração traseira

4 = tração nas quatro rodas

Tranformando

mpg <- mpg %>%
  mutate(drv = recode(drv,"4" = "Quatro rodas",
                      "f" = "Dianteira",
                      "r" = "Traseira"))

Conferindo

table(mpg$drv)
## 
##    Dianteira Quatro rodas     Traseira 
##          106          103           25

Recodificamos os lables da variável usando mutate e recode do dplyr!

Refazendo o gráfico

ggplot(data = mpg) +
  aes (x = drv, fill = class) +
  geom_bar() + 
  labs(
    title = "Tipo de tração por modelo",
    subtitle = "Periodo 1999-2008",
    caption = "Data: ggplot2::mpg. Explore em www.statsandr.com",
    x = "Tração",
    y = "Frequência",
    fill = "Modelo"
  )

E se eu quiser colunas lado a lado, e nao empilhadas? Use position=position_dodge()

Tração segundo ano de fabricação

ggplot(data = mpg) +
  aes (x = drv, fill = factor(year)) +
  geom_bar(position=position_dodge())

E se eu quiser ver essa relação para cada modelo? use: facet_wrap

ggplot(data = mpg) +
  aes (x = drv, fill = factor(year)) +
  geom_bar(position=position_dodge()) +
  facet_wrap(. ~class) # note que as escalas no eixo Y são as mesmas

Como deixar as escalas livres? Use: scales = “free”

ggplot(data = mpg) +
  aes (x = drv, fill = factor(year)) +
  geom_bar(position=position_dodge()) +
  facet_wrap(. ~class, scales = "free") 

2.3 Boxplot

ggplot(data = mpg) +
  aes(y = hwy) +
  geom_boxplot()

Podemos interpretar que a mediana está mais próxima do primeiro quartil do que do centro? Vamos tentar melhorar a qualidade do gráfico?

Nesse tipo de gráfico podemos inserir no eixo x uma variável categórica e em y variável uma contínua

Eficiência x classe do carro

ggplot(data = mpg) +
  aes(x = class, y = hwy) +
  geom_boxplot()

Os carros compatos (e sub) e midsize apresentam maior variabilidade de eficiência comparado aos demais modelos, apesar dos outliers os SUV e as Pickups apresentam a menor variabilidadede eficiência

Vamos tentar melhorar a qualidade do gráfico?

Inserindo cor para cada classe de carros

ggplot(data = mpg) +
  aes(x = class, y = hwy, fill = class) + #cor (borda e preechimento)
  geom_boxplot()

Mudando cor para cada classe de carros - paleta brewer

ggplot(data = mpg) +
  aes(x = class, y = hwy, fill = class) + #cor (borda e preechimento)
  geom_boxplot() +
  scale_fill_brewer(palette="Set1")

ggplot(data = mpg) +
  aes(x = class, y = hwy, color = class) + #borda
  geom_boxplot()

Incluindo a dispersão dos dados

ggplot(data = mpg) +
  aes(x = class, y = hwy, fill = class) + #cor nas caixas com fill
  geom_boxplot(varwidth = TRUE) +
  geom_jitter(alpha = 0.25) + #adiciona a distribuição das obs
  theme(legend.position = "none") #remove legenda

geom_jitter(alpha = estética, width/height = largura e altura)

2.4 Densidade

Esses parâmetros estéticos alteram a cor (color e fill) e a opacidade ( alpha) dos elementos geom em um gráfico em geral:

color = linha externa fill = interior Mas no gráfico acima como indicamos uma variável as cores foram distribuídas nos levels

Density plot de uma variável contínua

ggplot(mpg, aes(x = hwy)) +
  geom_density()

Density plot de uma variável contínua

ggplot(mpg, aes(x = hwy)) +
  geom_density(fill = "yellow")

Density plot de uma variável contínua

ggplot(mpg, aes(x = hwy)) +
  geom_density(fill = "lightblue", alpha = 0.3, color = "red")

ggplot(mpg, aes(x = hwy)) +
  geom_density(fill = "lightblue", alpha = 0.7, color = "red")

Desnity plot com cores para diferentes categorias sem sobreposição

ggplot(mpg, aes(x = hwy, fill = class)) +
  geom_density() +
  ggtitle("Sem sobreposiçao")

Density plot com cores para diferentes categorias com sobreposição

ggplot(mpg, aes(x = hwy, fill = class)) +
  geom_density(alpha = .6) +
  ggtitle("Com sobreposiçao")

ggplot(data = mpg) +
  aes(x = hwy, color = class, fill = class) + 
  geom_density(alpha = 0.25) #transparencia

Inserindo títulos

ggplot(data = mpg) +
  aes(x = hwy, color = drv, fill = drv) + 
  geom_density(alpha = 0.25) + #transparencia
  labs(
    title = "Eficiência segundo tipo de tração",
    subtitle = "Periodo 1999-2008",
    caption = "Data: ggplot2::mpg. Explore em www.statsandr.com",
    x = "Eficiência",
    y = "Densidade"
  )

2.5 Histograma

ggplot(data = mpg) +
  aes(x = hwy) + # milhas rodoviárias por galão ou eficiência
  geom_histogram(bins = 30)

Mudando cor

ggplot(data = mpg) +
  aes(x = hwy) + # milhas rodoviárias por galão ou eficiência
  geom_histogram(bins = 30, fill= "gray") 

Vamos mudar o plano de fundo? Vamos mudar o theme

ggplot(data = mpg) +
  aes(x = hwy) +  
  geom_histogram(bins = 30, fill= "gray") +
  theme_classic()

ggplot(data = mpg) +
  aes(x = hwy) + 
  geom_histogram(bins = 30) +
  theme_bw()

ggplot(data = mpg) +
  aes(x = hwy) + 
  geom_histogram(bins = 30) +
  theme_minimal()

Obrigada!!!

3 Referências:

Wickham, H. (2009). ggplot2 - Elegant Graphics for Data Analysis. Use R!.

Confira a versão atualizada escrita por Hadley Wickham, Danielle Navarro e Thomas Lin Pedersen em https://ggplot2-book.org/