6.1 Pacote ggplot2

O pacote ggplot2 é um poderoso pacote de visualização de variáveis. Esse pacote é estruturado de forma que a “gramática” seja utilizada para um gráfico a partir de múltiplas camadas.

As camadas serão formadas por dados, mapeamentos estéticos, transformações estatísticas dos dados, objetos geométricos (pontos, linhas, barras etc.) e ajuste de posicionamento. Além disso, existem outros componentes, como os sistemas de coordenadas (cartesiano, polar, mapa etc.) e, se for o caso, divisões do gráfico em subplots (facet).

Além de de uma filosofia bem fundamentada, o ggplot2 ainda traz outras vantagens em relação aos gráficos do R base:

• Gráficos naturalmente mais bonitos;

• Fácil personalização dos gráficos

• Estrutura padronizada das funções, que deixa o aprendizado mais intuitivo;

Na aula de hoje, iremos aprender, de maneira não exaustiva, a construir alguns tipos de gráfico com o ggplot2. Para explorar a multitude de produtos de visualização que podemos elaborar com o ggplot2, assim como seus códigos, basta acessar: https://r-graph-gallery.com/index.html

6.1.1 Gráficos de pontos

No ggplot2, os gráficos são construídos camada por camada, sendo a primeira delas dada pela função ggplot(). Essa função recebe um data frame e o comando aes (abreviação de aesthetic), no qual indicamos quais variáveis queremos mapear.

Lembrete: ao contrário do pacote, que se chama ggplot2, a função se chama apenas ggplot(), sem o 2.

Vamos utilizar o arquivo IBGE para criar um gráfico de pontos (valores quantitativos) com as variáveis Renda Média (SM) e IDH (IDH2010).

IBGE<-read.csv("/Users/eugeniaviana/Documents/Documents/Eugenia/Sociologia/MQ/IBGE.csv")

Primeiramente chamamos a função ggplot(). No comando aes(), indicamos que queremos a variável SM (x=SM) eixo horizontal x e IDH2010 no eixo vertical y (y=IDH2010).

Em seguida, adicionamos o comando geom_point(), precedido pelo símbolo +, para indicar que queremos um gráfico de pontos.

IBGE %>% ggplot(aes(x=SM, y=IDH2010))+geom_point()

Podemos colorir o gráfico adicionando o comando color=“” dentro a função geom_point(). Vamos escolher a cor azul (blue), que já vem como uma das cores padrões do R.

ggplot(IBGE, aes(x=SM, y=IDH2010))+geom_point(color="blue")

Podemos, ainda, adicionar uma linha de tendência com a função stat_smooth(). Vamos indicar o método (method=lm) e a cor da linha (col=“red”).

ggplot(IBGE, aes(x=SM, y=IDH2010))+geom_point(color="blue")+
  stat_smooth(method = "lm", col = "red")
## `geom_smooth()` using formula = 'y ~ x'

6.1.2 Gráficos de barras simples

Para construir construir gráficos de barras, utilizamos a função geom_bar().

Vamos construir um gráfico utilizando nossa base de dados de empréstimos. Digamos que queremos construir um gráfico indicando a quantidade de pessoas por categoria na variável estado_civil2.

(obs: caso não lembre como construímos a variável estado_civil2, voltar aqui)

dados %>% ggplot(aes(x=estado_civil2))+geom_bar()

O comando fill=“cor” pode ser utilizado para escolher a cor de preenchimento do gráfico. Aqui, vamos colorir de azul claro (lightblue), uma cor já pré-definida no R.

dados %>% ggplot(aes(x=estado_civil2))+geom_bar(fill="lightblue")

Além disso, podemos escolher uma cor personalizada através do código hex. Você pode obter uma lista de códigos hex clicando aqui.

dados %>% ggplot(aes(x=estado_civil2))+geom_bar(fill="#5EB8B4")

Podemos, ainda, escolher uma cor de contorno para o gráfico através do comando color=“cor”.

dados %>% ggplot(aes(x=estado_civil2))+geom_bar(fill="#5EB8B4", color="black")

Gráfico de barras e proporções

Ótimo, já temos um gráfico de barras personalizado. No entanto, o nosso eixo y mostra a contagem efetiva de quantos indivíduos temos em cada categoria da variável estado_civil2. Muitas vezes, podemos preferir representar as porcentagens para cada categoria.

Usamos o pacote GGally para criar o gráfico de barras com proporções. O comando y=after_stat(prop) que calcula a proporção de cada categoria no eixo y. Além disso, temos que adicionar o comando stat=“prop” na função geom_bar().

#Criar gráfico de barras com porcentagem

dados%>%ggplot(aes(y= after_stat(prop),
                   x=estado_civil2))+geom_bar(fill="#5EB8B4",stat = "prop")

Com esse gráfico conseguimos ver que mais de 70% dos indivíduos da nossa base de dados são casados(as)

Se quisermos que as porcentagens apareçam em formato de % e não em formato decimal, podemos usar o comando scale_y_continuous(labels = percent_format()), do pacote scales.

#Chamar o pacote scales
library(scales)

#Criar gráfico de barras com porcentagem

dados%>%ggplot(aes(y= ..prop.., group = 1,
                   x=estado_civil2))+geom_bar(fill="#5EB8B4")+
scale_y_continuous(labels = percent_format()) #adicionar símbolo de %

Gráfico de barras com duas variáveis

Os gráficos de barra também podem ser realizados com duas variáveis diferentes, uma no eixo x e outra no eixo y. Para isso usamos o comando stat=, dentro da função geom_bar()

Podemos, também, resumir os dados usando uma função específica, como média, mediana, etc. Para isso, usamos o comando stat=“summary”, seguido pelo comando fun=“mean”, que especifica que queremos a média da variável que será representada no eixo Y.

dados %>% ggplot(aes(x=estado_civil2, y=idade))+
geom_bar(stat = "summary", fun = "mean",fill="#5EB8B4")

Comando stat + fun

• stat = “summary” + fun = “mean”: Para plotar a média dos valores.
• stat = “summary” + fun = “sum”: Para plotar a soma dos valores.
• stat = “summary” + fun = “median”: Para plotar a mediana dos valores.
• stat = “summary” + fun = “length”: Para contar o número de ocorrências.

6.1.3 Gráfico de barras empilhado

Um outro tipo de gráfico de barras bastante utilizado é o diagrama de barras empilhado, que mostra o cruzamento entre duas variáveis. Vamos criar um diagrama mostrando a divisão de faixa etária por estado civil na nossa base de dados.

Na função geom_bar(), utilizamos o comando position=“fill” para indicar que queremos as categorias empilhadas, formando sempre 100%.

dados%>%ggplot(aes(x=estado_civil2, fill = idadeQ)) + 
  geom_bar(position="fill")

O comando position=“stack” realiza uma contagem de indivíduos em cada categoria e apresenta os resultados empilhados no gráfico.

dados%>%ggplot(aes(x=estado_civil2, fill = idadeQ)) + 
  geom_bar(position="stack")

O comando position=“dodge” representa a contagem de indivíduos em cada categorias lado a lado

dados%>%ggplot(aes(x=estado_civil2, fill = idadeQ)) + 
  geom_bar(position="dodge")

Comando position

• position = “fill”: Para plotar a média dos valores.
• position = “stack”: Para plotar a soma dos valores.
• position = “dodge”: Para plotar a mediana dos valores.

Assim como nos exemplos anteriores, podemos modificar as cores dos gráficos utilizando esquemas de cores já prontos no R base ou em diversos pacotes. A função scale_fill_brewer() traz uma série de paletas de cores, através do comando palette=“nome da paleta”.

dados%>%ggplot(aes(x=estado_civil2, fill = idadeQ)) + 
  geom_bar(position="fill")+
  scale_fill_brewer(palette="BrBG")

6.1.4 Gráficos de linhas

Para construir gráficos de linhas com o ggplot utilizamos a função geom_line()

Vamos utilizar uma base de dados babynames para construir um gráfico mostrando a evolução da popularidade de três nomes nos EUA, de 1880 a 2015.Este pacote de dados está disponível para instalar no CRAN do R, com o nome de “babynames”.

Devido à enorme extensão da base, filtramos apenas os nomes “Amanda”, “Emma” e “Taylor”, mantendo, também, apenas os nomes femininos.

Utilizamos o argumento year (ano) no eixo x, o argumento n (contagem de bebês) no eixo y. Além disso, agrupamos e colorimos as linhas a partir da variável nome, com os comandos group e color.

#Criar gráfico de linhas
babynames%>%ggplot( aes(x=year, y=n,group=name, color=name)) + 
  geom_line()

6.1.5 Histogramas e densidade

Para construir histogramas, utilizamos a função geom_histogram(). Para isso precisamos de uma variável quantitativa.

Vamos montar um histograma da idade dos indivíduos da nossa base de dados.

ggplot(dados, aes(x=idade)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Para definir o tamanho de cada intervalo, podemos utilizar o argumento bindwidth.

ggplot(IBGE, aes(x=SM)) + geom_histogram(binwidth =0.5)

Gráfico de densidade

Podemos, também, criar gráficos de densidade no lugar do histograma. Nesse caso, utilizamos a função geom_density(). O comando alpha indica a transparência do preenchimento do gráfico.

ggplot(dados, aes(x=idade)) + geom_density(alpha=.2, fill="#FF6666")

6.1.6 Boxplot

Boxplots também são úteis para estudarmos a distribuição de uma variável, principalmente quando queremos comparar várias distribuições.

Para construir um boxplot no ggplot, utilizamos a função geom_boxplot(). Ele precisa dos atributos x e y, sendo que no atributo x devemos mapear uma variável categórica.

Façamos um boxplot cruzando o estado civil e idade.

dados%>%ggplot(aes(x=estado_civil2, y=idade)) + geom_boxplot()

6.1.7 Gráfico de calor

O gráfico de calor é utilizado para representar duas variáveis qualitativas e uma variável quantitativa.

Digamos que queremos cruzar estado civil, idade por grupos e o valor do empréstimo. Teremos a seguinte grafia:

dados%>%ggplot(aes(estado_civil2, idadeQ, fill= valor_emprestimo)) + 
  geom_tile()

6.1.8 Adicionando títulos e rótulos

Para tornar nossos gráficos mais apresentáveis, muitas vezes teremos que modificar elementos como os rótulos dos eixos, legenda, entre outros.

Adicionando rótulos

Voltemos ao diagrama de barras.

O comando xlab determina o rótulo que aparecerá no eixo X (horizontal). Já o comando ylab determina o rótulo do eixo Y (vertical).

ggplot(dados, aes(y = ..prop.., group = 1,
                   x=estado_civil))+geom_bar(fill="#5EB8B4")+
  xlab("Estado Civil")+
  ylab("Proporção (%)")

Adicionando rótulo da legenda

Em um gráfico de barras empilhadas (ou em qualquer outro tipo que tenha uma legenda), utilizamos a função labs()e o comando fill=“Rótulo da legenda” para modificar o rótulo da legenda.

dados%>%ggplot(aes(x=estado_civil2, fill = idadeQ)) + 
  geom_bar(position="fill")+
  scale_fill_brewer(palette="BrBG")+
  xlab("Estado Civil")+
  ylab("Proporção (%)")+
labs(fill="Idade")

Também é possível conjugar todos os rótulos na função labs(), através do seguinte formato: labs(x=“Rótulo do eixo x”, y=“Rótulo do eixo y”, fill= “Rótulo da legenda”)

6.1.9 Juntando gráficos

Uma funcionalidade muito útil do ggplot2 é a possibilidade de usar facets para replicar um gráfico para cada categoria de uma variável.

Vamos criar um gráfico de estado civil para cada categoria de idade que criamos na segunda aula, com a variável idadeQ.

ggplot(dados, aes(x=idadeQ))+geom_bar(fill="#5EB8B4")+
  facet_wrap(~estado_civil, ncol=2)