Gráficos com ggplot 1.0 Adicionando camadas em um gráfico de linha (Scaterplot) 1.1 Camada Estética (aes) 1.2 Histogramas e densidade 1.3 Gráfico de barras (barplot) 1.4 boxplot 1.5 gráficos de linha 1.6 Gráficos interativos

 

Gráficos com ggplot

O ggplot2 é uma pacote do R, também criado por Hadley Wickham, que faz parte do tidyverse e implementa um sistema de gráficos baseados em uma gramatica própria permitindo a criação de gráficos avançados. Essa gramatica se encarrega de diversos detalhes que precisariam ser especificados se fossemos fazer usando o modulo base do R. A gramatica do ggplot2 é portanto diferente dos demais pacotes gráficos existentes no R e faz com que pareça mais complicado de se chegar ao resultado desejado, no entanto, como no dplyr após nos familiarizarmos com ela, podemos através da combinação de seus diversos elementos usando poucas linhas conseguimos produzir gráficos bastante complexos , multicamadas e com excelente qualidade final.

Usando essa gramatica e possível combinar seus elementos e facilmente criar novos gráficos de muitas maneiras customizando seu aspecto. Atualmente podemos encontrar mais de 70 pacotes do R que estendem ou implementam funções gráficas da ggplot2 podemos ver Aqui alguns desses pacotes.

a gramatica da ggplot2 consiste dos seguintes elementos que representam camadas:

ElementoDesciçãoFunções
Dado
(Data)
o conjunto de dados que será usadoggplot()
Estética
( Aesthetics)
variáveis e escalas para mapear o gráficoaes()
Geometria
( Geometries)
elementos visuais usados no gráficogeom_???()
Faceta
( Facets)
múltiplos gráficos (sub painéis)facet_???()
Estatistica
( Statistics)
representação estatística dos dados para
melhor entendimento/visualização
stat_???(),
Coordenada
( Coordinates)
representação espacial dos dadoscoord_???()
Tema
( Themes)
estilos cores aspectos geriastheme_???()
   
   

 

Para fazer um graficos precisamos pelo menos das camadas de Dados, Estética Geometria

Para saber mais consulte:

Documentação da ggplot2

Tutorial ggplot2

R Graphics Cookbook

 

1.0 Adicionando camadas em um gráfico de linha (Scaterplot)

Como exemplo para ilustrar como funcionam as camadas na ggplot2 vamos utilizar os dados iris como exemplo. O primeiro passo para se fazer um grafico é conhecer o dado ,então use as funções head() e str() para isso.

 

agora vamos ao nosso gráfico, suponha que queremos explorar a relação entre o comprimento e a largura da Sépala das especies de Lírios no dado apresentado acima.

No pacote graphics que esta disponível no R bastaria :

Ao tentar aplicar a mesma logica ao ggplot2 teríamos:

onde iris é o nome do data.frame , e a função aes representa os aspectos estéticos ou seja, nesse caso os elementos x e y

a linha acima gerar um gráfico sem nenhum elemento

para que possamos visualizar os pontos necessitamos de um elemento geométrico, nesse caso pontos.

Uma das características interessantes da ggplot2 e que podemos ir armazenando os elementos gráficos e comando as camadas como no comando abaixo:

 

vamos supor que queremos cores para cada uma das especies , nesse caso vamos ter de alterar um dos aspectos de mapeamento dos dados (estéticos)

 

Agora temos além das cores para cada especie , uma legenda. Mas nosso gráficos varias pontos são coincidentes, para melhor exibir esse pontos vamos usar a função geom_jitter() que adiciona um descolamento aleatório a cada dimensão e além disso vamos adicionar uma transparência aos pontos de 60%.

 

 

repita o comando e veja que o gráfico muda um pouco, uma vez que o "ruido" adicionado pela função é aleatório. repare também que existem pontos mais escuros, ou seja mesmo com o jitter ainda pode haver alguma sobreposição.

Vamos adicionar mais uma camada dividindo em sub painéis por especie.

 

 

Em seguida vamos adicionar mais uma camada , a estatística adicionando uma reta de regressão linear a cada subplot

 

 

Manipulando uma outra camada, desta vez, a de coordenadas, vamos fazer com que as coordenadas de x e y fique com um espaçamento igual. Para isso vamos usar a função coord_equal()

 

 

existem varias outras funções uteis para altera coordenadas, entre as mais usadas poderíamos destacar

scale_x_...() e scale_y_...() onde ... pode ser continuou, date, log etc... permitindo especificar melhor as escalas de x e y de nosso gráfico

 

mais um aspecto que pode nos interessar aqui é modificar os labels através da função labs()

 

 

no exemplo acima estamos especificando os labels do gráfico, das coordenadas x e y e da legenda de uma só vez. existem ainda as funções ggtitle() , xlab(), ylab() .

 

podemos alterar ainda a camada do tema , varios temas já configurados estão disponíveis sendo também possível criar seu próprio tema.

 

 

experimente outros temas como por exemplo theme_dark(), theme_minimal(), theme_linedraw(), theme_void() , atribua a parte ate labs a um objeto e depois teste apenas modificando o tema.

1.1 Camada Estética (aes)

Antes de mais nada vamos conhecer um pouco mais as opções disponíveis na camada estética ( aes()), ela possui os seguintes parâmetros.

ParametroDescrição
xvalores do eixo x
yvalores do eixo y
colourcor/cores da linhas externas ou dos pontos
fillcor de preenchimento
sizediâmetro do ponto/espesura da linha
alphatransparência (0 - nenhuma a 1 - transparente)
linetypepadrão da linha, 1 - solida, 2 a 12 tracejadas (fig 1)
labelstexto no gráfico ou nos eixos
shapetipo de simbolo empregado 0 a 25 (fig 2) ou qualquer letra/numero
  

 

A linhas que podemos definir são

figura 1 - Linhas

 

e o símbolos , note que para os simbolo sólidos de 21 a 25 pode-se definir a cor da linha com o parâmetro colour e o preenchimento do simbolo com fill

figura 2 - Simbolos

 

 

1.2 Histogramas e densidade

 

Agora que já vimos a ideia de camadas vamos fazer um simples histograma.

 

repare que a função geom_histogram() retornou uma mensagem de aviso

podemos especificar a quantidade de classes usando os parâmetros binwidth ou bins. você deve sempre buscar um valor mais adequado o defaul são 30 classes.

 

ou

para converter aproximadamente bins em binwidth , onde 30 seria o numero de bins e o resultado

 

Suponha agora que queremos um histograma para cada especie.

podemos também usar o parâmetro position da função geom_histogram() para especificar baras lado a lado ou empilhadas . Teste as opções dodge e fill , o default é stack.

 

Teste também as opções de coordenadas cord_flip() e coord_polar()

 

 

 

a função geom_density() é semelhante, teste com parametro alpha

1.3 Gráfico de barras (barplot)

 

um barplot simples é facilmente obtido , veja que aqui nesse data.frame por default o total é "contado" pela função geom_bat() que tem como default o parâmetro stat="count" , ou seja, as ocorrências de cada tipo da variável vore serão contadas e exibidas no gráfico gerado.

 

 

mas se tivermos o seguinte dado, como fazer para ter um barplot

 

 

uma primeira tentativa seria:

 

ou quem sabe

parece que vamos precisar da variável sexo e também de total

 

continuamos sem sucesso mas a mensagem de erro da uma pista. a função geom_bar() está contando o numero de vezes que Feminino, Masculino e ignorado aparecem no data.frame, assim sendo precisamos além de especificar aes(sexo,total) também avisar a função geom_bar() para usar o valro de total

Valor olhar os dados

Observe que sexo é um fator e que por default a ordem do fator é alfabética, você pode confirmar isso pedindo

 

 

uma das principais razões de não conseguirmos fazer gráficos corretamente na ggplot2 tem a ver com a maneira que a biblioteca trata os fatores. Para resolver esse problema precisamos reordenar o fator para seguir a ordem de entrada.

vamos conferir

e por fim fazer mais uma vez o nosso gráfico na ordem especificada no novo fator.

 

mais um exemplo, suponha que você tem dados das medias mensais de temperaturas medias , máximas , mínimas e precipitação do Rio de janeiro

antes de mais nada apos inspecionar os dados vamos corrigir o fator mes

e agora vamos produzir um gráfico de barras com os valores médios mensais e em cada barra os valores mínimo e máximo. Vamos colorir de acordo com uma escala de cores onde azul são temperaturas mais frias e vermelho as mais quentes.

 

Repare no comando acima que temos duas funções geom_???() no mesmo gráfico, no caso uma faz as barras e outra as barras de erros. Esse é um recurso comumente empregado para adicionar diversas camadas a nosso gráfico.

 

1.4 boxplot

um boxplot básico teria

 

ou ainda algo por especie e com as coordenadas rodadas!

 

Suponha que necessitamos de um boxplot para as quatro variáveis do dataframe iris como fazer isso em ggplot2 ? no R padrão (graphics) faríamos

 

Este é onde a maioria dos iniciantes em ggplot2 se confunde. Para fazer isso é necessario transformar o dado para um formato longo, ou seja, apenas 3 colunas.

 

use str() e head() para ver como ficou a nova estrutura de dados. A partir desse novo formato podemos:

 

Se quisermos diferenciar por especie

 

se quisermos agora subplots especie

 

repare que o texto do label em x ficou confuso, como podemos modificar isso? Seria possível também eliminar a legenda a direita já que as variáveis tem label?

 

Repare que no gráfico acima customizamos o tema, mudando vários aspectos como a orientação do texto no label, e a cor de fundo no background. para se ter uma ideia de quantos parâmetros podem ser modificados no tema, use o comando

 

 

1.5 gráficos de linha

 

O grafico de linha é um dos mais empregados , são necessárias duas variáveis x e y , em geral continuas. existem algumas funções que fazem

 

 

 

podemos também representar a área abaixo da linha

ou ainda como uma função em escada (step)

 

 

podemos representar vários elementos, como pontos e linhas suavizadas

 

 

só para mostrar que podemos fazer linhas com outros tipos de dados

 

 

Note que temos 2 fatores e uma variável numérica apenas.

 

 

 

Existem ainda muitas outras funções que são capazes de produzir gráficos interessantes e complexos. Além da existência de muitos pacotes que estendem as funções da ggplot2, podemos destacar ggExtra, ggmaps, ggedit entre cerca de 70 outros.

 

Visite esses sites para ter algumas indeias/ inspirações

ggplot gallery

top 50 ggplot2 visualization

 

1.6 Gráficos interativos

Existem bibliotecas que implementam gráficos interativos que são compatíveis com a ggplot2 , segue um pequeno exemplo usando a plotly:

 

 

 

 

 

####1.7 Exercício