O Que é ggplot2?

O ggplot2 é um pacote de visualização de dados. Elefoi criado por Hadley Wickham em 2005, baseado no livro Grammar of Graphics, de Leland Wilkinson. A ideia principal é criar um gráfico como se fosse uma frase de uma língua, onde casa elemento do gráfico seria uma palavra. Isto nos permite construir gráficos tão complexos quanto quisermos. Os gráficos criados com esta ferramenta são, em geral, mais bonitos do que os gráficos tradicionais do R. Entretanto, esta versatilidade tem dois custos associados:

Veja, por exemplo, veja o gráfico a seguir. É o resultado de um estudo onde 18 sujeitos tiveram seu sono restrito a apenas 3 horas por dia a partir do dia 1. A variável resposta é o tempo de reação médio destes sujeitos a uma série de testes aplicados a cada dia do experimento.

Para reproduzir os exemplos deste tutorial, é necessário instalar os pacotes ggplot2, ggthemes e lme4 através do comando

A seguir, é necessário carregar estes pacotes na memória:

library(ggplot2)
library(ggthemes)
library(lme4)

Sintaxe Básica

O ggplot2 exige que os dados a serem plotados estejam em um data frame. Não é possível plotar diretamente os dados presentes em uma matriz ou um vetor. Sempre teremos que transformar os dados para data frame ou construir um data frame com os dados que possuímos.

O comando principal a ser utilizado se chama ggplot (sem o 2). Através dele vamos definir qual é a variável preditora e qual é a variável resposta em nosso conjunto de dados. Assim, o comando básico a partir do qual vamos gerar todos os gráficos é

ggplot(dados, aes(x=Preditora, y=Resposta))

Em que Preditora é a variável preditora que vamos considerar e Resposta é a variável resposta. Vamos começar nosso estudo com um gráfico de dispersão.

Carregue o conjunto de dados iris na memória do R e tente criar o gráfico de dispersão entre a Largura da Pétala (variável resposta) e o Comprimento da Pétala:

data(iris)
ggplot(iris, aes(x=Petal.Length, y=Petal.Width))

Note que não há nenhum ponto no gráfico que criamos. Isto ocorre porque sempre temos que ser explícitos com o ggplot2. O comando ggplot só serve para definir parâmetros básicos sobre o gráfico, como as variáveis que serão plotadas. Para que o gráfico seja construído de fato, precisamos informar que tipo de gráfico queremos.

Como estamos querendo um gráfico de dispersão, vamos utilizar o comando geom_point(). Com ele, estamos informando ao ggplot2 que desejamos plotar o conteúdo do conjunto de dados iris na forma de pontos.

Tente rodar o seguinte comando abaixo e observe o resultado:

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point()

Muito melhor, não? Agora sim podemos ver o que está acontecendo com o nosso conjunto de dados e como é a relação entre as variáveis Largura da Pétala e Comprimento da Pétala. Entretanto, podemos melhorar este gráfico ajeitando as suas legendas. Para isto, vamos utilizar o comando `labs:

Seria interessante colorir este gráfico de acordo com as espécies das plantas. Para isto, vamos expandir nossos conhecimentos sobre o geom_point().

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris")

Note que agora o gráfico tem uma legenda, que apareceu automaticamente. Entretanto, seu título está em inglês, pois é o nome da coluna presente no conjunto de dados original. Podemos alterá-lo de duas maneiras: mudando o nome da coluna do data frame ou utilizando o argumento colour:

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
    geom_point(aes(colour=Species)) + 
    labs(x="Comprimento da Petala", y="Largura da Petala", title="Iris", 
    colour="Espécies")

A melhor maneira de escolher cores para um gráfico é através da definição de uma paleta de cores. O ggplot2 deixa isto mais fácil através do comando scale_color_brewer(). Boas fontes de informação sobre paletas de cores são os sites http://docs.ggplot2.org/current/scale_brewer.html e http://colorbrewer2.org/.

Vejamos como duas paletas de cores diferentes se comportam:

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris") +
  scale_colour_brewer(palette="Greens", name="Espécies")

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) +
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris") + 
  scale_colour_brewer(palette="Dark2", name="Espécies")

Já somos (quase) experts em construir gráficos de dispersão. Veremos agora como construir um histograma usando o ggplot2. Perceba que, até o momento, sempre estivemos trabalhando com duas variáveis dentro do argumento aes da função ggplot.

A partir de agora, teremos que utilizar apenas uma variável para construir nosso gráfico. Vamos escolher, por exemplo, o comprimento da pétala. Assim, se quisermos construir o seu histograma, basta rodar o código

ggplot(iris, aes(x=Petal.Length)) + 
  geom_histogram(bins=20) + 
  labs(x="Comprimento da Pétala", y="Frequência", title="Iris")

Note que vemos dois grupos principais de dados neste histograma. Poderíamos supor que isto se deve ao comportamento das diferentes espécies. Uma maneira de verificar este fato é construir o histograma para cada espécie independentemente:

ggplot(iris, aes(x=Petal.Width)) + 
  geom_histogram(bins=20) + 
  labs(x="Comprimento da Pétala", y="Frequência", title="Iris") +
  facet_grid(~ Species)

Também podemos pintar um histograma de cada cor:

ggplot(iris, aes(x=Petal.Length, colour=Species, fill=Species)) + 
  geom_histogram(bins=20) + 
  labs(x="Comprimento da Pétala", y="Frequência", title="Iris") + 
  facet_grid(~ Species)

Os parâmetros colour e fill alteram as cores do contorno e do preenchimento das barras, respectivamente.

Outra ferramenta usada para verificar a distribuição de dados é o boxplot. Criar um boxplot com o ggplot2 é fácil: basta utilizar a função geom_boxplot():

ggplot(iris, aes(x=Species, y=Petal.Length)) + 
  geom_boxplot() + 
  labs(x="Espécie", y="Comprimento da Pétala", title="Iris")

Criar gráficos de barra também não é difícil:

ggplot(iris, aes(x=Species)) + 
  geom_bar() + 
  labs(x="Espécie", y="Frequência", title="Iris")

É possível alterar vários parâmetros de formato e cores de um gráfico aplicando um tema a ele. Um tema nada mais é do que um conjunto de parâmetros que personalizam o gráfico. Podemos assim preparar algo para impressão em preto em branco ou para simplesmente alterar a apresentação dos dados. Novos temas podem ser carregados através do pacote ggthemes.

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris") +
  scale_colour_brewer(palette="Dark2", name="Espécies")

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris") + 
  scale_colour_brewer(palette="Dark2", name="Espécies") +
  theme_bw()

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris") + 
  scale_colour_brewer(palette="Dark2", name="Espécies") +
  theme_economist()

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris") + 
  scale_colour_brewer(palette="Dark2", name="Espécies") +
  theme_solarized()

ggplot(iris, aes(x=Petal.Length, y=Petal.Width)) + 
  geom_point(aes(colour=Species)) + 
  labs(x="Comprimento da Pétala", y="Largura da Pétala", title="Iris") + 
  scale_colour_brewer(palette="Dark2", name="Espécies") +
  theme_excel()

Exercícios

  1. Carregue o pacote lme4 na memória do R. Utilize o conjunto de dados sleepstudy para obter um gráfico similar ao do início deste texto.
  1. Carregue conjunto de dados BancoMundial.csv na memória do R. Este arquivo está disponível para download em https://github.com/mnunes/ggplot2/ . Verifique se ele possui 844 linhas e 9 colunas. As suas colunas são
  1. Faça o gráfico de Fertilidade versus Pobreza, utilizando todos os anos do arquivo. Adicione uma reta de regressão linear a estes dados. Determine se há alguma relação entre as variáveis.

  2. Verifique se isto ainda vale se construirmos gráficos para cada um dos anos presentes nos dados.

  3. Pinte os pontos do gráfico de acordo com a região. Alguma região se destaca como sendo mais pobre e com maior quantidade de filhos por mulher? Qual?

  4. Repita os exercícios 3, 4 e 5 considerando Expectativa de Vida versus PIB per capita. Quais são as suas conclusões?

Site do autor: http://marcusnunes.me