6 Gráficos com ggplot2

Existem muitas maneiras de fazer gráficos com o R, cada um com as suas vantagens e desvantagens. O foco aqui está no pacote ggplot2, que é baseado na Grammar of Graphics (Gramática dos Gráficos) para descrever os gráficos de dados.

Utilize o cádigo abaixo para instalar o pacote ggplot2:

Sempre carregue o pacote antes de utilizá-lo:

Utilizaremos o banco de dados: dadosfisio

Baixar os dados:

Veja as primeiras linhas:

##   z x  y cota       ds        cc        ma    ptotal   tibo   tibe         a
## 1 1 1  1 9.15 1.501258 0.3975615 0.1288555 0.5264170  46.08  26.78  926.3955
## 2 1 1  3 8.95 1.474362 0.3818767 0.1530250 0.5349017  19.20  26.10  383.8130
## 3 1 1  5 8.78 1.469118 0.3514075 0.1851484 0.5365559 172.80 113.92  275.3272
## 4 1 1  7 8.59 1.392845 0.3724094 0.1882073 0.5606167  96.00  74.83 1206.7585
## 5 1 1  9 8.48 1.383309 0.3559554 0.2076696 0.5636250  30.72  37.20  151.4032
## 6 1 1 11 8.41 1.417010 0.3144429 0.2385509 0.5529937 151.32 124.52  368.7992
##            b       X3       X60       X90      X120
## 1 -0.5290035 518.0810 153.24778 106.20581  73.60416
## 2 -0.4176008 242.5903  92.74121  69.43243  51.98188
## 3 -0.1307566 238.4857 176.48417 161.19222 147.22529
## 4 -0.3764298 798.0272 335.41915 258.38731 199.04648
## 5 -0.2270424 117.9800  69.94649  59.76121  51.05906
## 6 -0.1549382 311.0754 217.73464 195.56291 175.64890

O código abaixo é um exemplo de um gráfico bem simples, construído a partir das duas principais camadas. O eixo y representa a densidade do solo e ao eixo x a variável capacidade de campo:

Aqui, essas formas geomótricas são pontos, selecionados pela função geom_point(), gerando, assim, um gráfico de dispersão.

A função aes() vem da palavra Aesthetics define a relação entre os dados e cada aspecto visual do gráfico, como qual variável será representada no eixo x, qual será representada no eixo y, a cor e o tamanho dos componentes com a função colour.

Outro aspecto que pode ser mapeado nesse gráfico é a cor dos pontos:

Agora, a variável z (classe de solo) foi mapeada a cor dos pontos, sendo que pontos vermelhos correspondem ao Nitossolo (valor 1) e pontos azuis e verdes, os Latossolos. Observe que inserimos a variável z como um fator, pois temos interesse apenas nos valores “1”, “2” e “3”. No entanto, também podemos mapear uma variável contínua, a cor dos pontos:

A porosidade do solo (ptotal), é representado pela tonalidade da cor azul.

Também podemos mapear o tamanho dos pontos a uma variável de interesse:

Outros geoms bastante utilizados:

  • geom_line: para retas definidas por pares (x,y)
  • geom_abline: para retas definidas por um intercepto e uma inclinação
  • geom_hline: para retas horizontais
  • geom_boxplot: para boxplots
  • geom_histogram: para histogramas
  • geom_density: para densidades
  • geom_area: para áreas
  • geom_bar: para barras

Veja a seguir como é fácil gerar diversos gráficos diferentes utilizando a mesma estrutura do gráfico de dispersão acima:

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Exemplo Baixar dados via web:

Criar gráficos:

Nestes exemplos, a altura da barra representará o valor em uma coluna do quadro de dados. Isso é feito usando stat="identity" em vez do padrão stat="bin":

Gráfico de barras agrupados:

Empilhado:

6.1 Personalizando os gráficos

6.1.1 Cores

O aspecto colour do boxplot, muda a cor do contorno. Para mudar o preenchimento, basta usar o fill.

Usando colour:

Usando fill:

Mude a cor dos objetos sem atribuir a uma variável. Para isso, observe que os aspectos colour e fill são especificados fora do aes():

6.1.3 Legenda

Remover a legenda para uma estética específica (fill):

Também pode ser feito ao especificar a scale:

Isso remove todas as legendas:

Alterando a ordem dos itens na legenda:

Modificando o texto de legenda de tétulos e rótulos:

Modificando a aparência do título e dos rótulos da legenda:

Modificando a caixa de legenda:

Mudando a posição da legenda:

Posicione a legenda no gráfico, em que x, y é 0,0 (canto inferior esquerdo) a 1,1 (canto superior direito):

Defina o “ponto de ancoragem” da legenda (o canto inferior esquerdo é 0,0; o canto superior direito é 1,1):

Coloque o canto inferior direito da caixa de legenda no canto inferior direito do gráfico:

6.1.5 Facets

Outra funcionalidade muito importante do ggplot2 é o uso de facets. Você quer dividir seus dados por uma ou mais variáveis e plotar os subconjuntos de dados juntos:

Podemos colocar os gráficos lado a lado também:

6.2 Exemplos

6.2.1 Regressão

Efeito do Gesso no Peso de grãos de feijão Estudo sobre o efeito do gesso no peso de grãos de feijo (Phaseolus vulgaris L.) feito por Ragazzi (1979). O experimento foi instalado em delineamento inteiramente casualizado e foram estudados 7 níveis de gesso, de 0 a 300, igualmente espados em 50 kg ha-1.

Baixar dados:

Verificar a estrutura dos dados:

## 'data.frame':    28 obs. of  3 variables:
##  $ gesso: int  0 0 0 0 50 50 50 50 100 100 ...
##  $ rept : int  1 2 3 4 1 2 3 4 1 2 ...
##  $ peso : num  135 140 148 132 162 ...

Análise de regressão:

## 
## Call:
## lm(formula = gesso ~ peso, data = dados)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -120.41  -70.79  -31.57   74.22  179.24 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -451.935    282.012  -1.603    0.121  
## peso           3.849      1.799   2.139    0.042 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 95.7 on 26 degrees of freedom
## Multiple R-squared:  0.1496, Adjusted R-squared:  0.1169 
## F-statistic: 4.575 on 1 and 26 DF,  p-value: 0.04201

Extrair a equação do modelo:

Criando o gráfico:

## `geom_smooth()` using formula 'y ~ x'

6.2.2 Delineamento em blocos casualizados- DBC

Efeito do Promalin sobre Furtos de Macieira

Resultados de um experimento instalado na Fazenda Chapadão, no município de Angatuba - SP. O delineamento experimental foi o de blocos casualizados, sendo as parcelas constituídas de 4 plantas espaçadas de 6 x 7 metros, com 12 anos de idade na época da instalação do experimento.

Baixar dados:

Verificar estrutura dos dados:

## 'data.frame':    20 obs. of  3 variables:
##  $ promalin: Factor w/ 5 levels "12.5","12.5+12.5",..: 1 3 4 2 5 1 3 4 2 5 ...
##  $ bloco   : Factor w/ 4 levels "I","II","III",..: 1 1 1 1 1 2 2 2 2 2 ...
##  $ peso    : num  142 140 141 151 154 ...

Transformação categorica:

Estatistísca descritiva:

##        promalin bloco        peso      
##  12.5      :4   I  :5   Min.   :130.6  
##  12.5+12.5 :4   II :5   1st Qu.:136.8  
##  25.0      :4   III:5   Median :141.6  
##  50.0      :4   IV :5   Mean   :143.0  
##  Testemunha:4           3rd Qu.:146.4  
##                         Max.   :165.0

Ativar o pacote ggplot:

Fazer o gráfico:

Analisando os blocos:

Inserindo médias:

Inserindo legenda nos eixos:

Inserindo legenda nos eixos:

## Warning: `fun.y` is deprecated. Use `fun` instead.

Inserindo tema_bw preto e branco:

## Warning: `fun.y` is deprecated. Use `fun` instead.

Inserindo legenda no topo:

## Warning: `fun.y` is deprecated. Use `fun` instead.

Mudando escala do eixo y:

## Warning: `fun.y` is deprecated. Use `fun` instead.

6.2.3 Dados Climáticos

Dados climáticos de Rondonópolis - MT

Baixar dados no banco de dados o arquivo: roo.xlsx

## 'data.frame':    4337 obs. of  11 variables:
##  $ dd    : int  1 1 2 3 4 5 6 7 8 9 ...
##  $ mm    : int  1 2 2 2 2 2 2 2 2 2 ...
##  $ ano   : int  1998 1998 1998 1998 1998 1998 1998 1998 1998 1998 ...
##  $ Prec  : num  NA 8.2 51 0.6 0 0 0 2.4 NA 0.8 ...
##  $ Tmax  : num  30 35.6 31.8 35.4 35.6 36.4 36.8 36.8 36.6 35.2 ...
##  $ Tmin  : num  21.7 21.8 21.8 21.5 22.1 22.5 23.5 23.5 24.3 22.9 ...
##  $ n     : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ Tbs   : num  NA NA 25.1 25 26.6 ...
##  $ Tbu   : num  NA NA 23.9 23 23.9 ...
##  $ UR    : num  NA NA 89.8 86.5 80 ...
##  $ Vvento: num  NA NA 0.125 0.125 0.275 0.325 0.2 0.175 0.15 0.25 ...

Boxplot para tempearatura mínima:

## Warning: Removed 222 rows containing non-finite values (stat_boxplot).

Gráfico de distribuição de temperatura mínima total:

## Warning: Removed 222 rows containing non-finite values (stat_density).

Gráfico de distribuição de temperatura mínima para cada mês:

## Warning: Removed 222 rows containing non-finite values (stat_density).

6.3 Referência

GROLEMUND, G. WICKHAM, H. R for Data Science Site: http://r4ds.had.co.nz/

SITE: https://www.statmethods.net/index.html

CHANG, W. R Graphics Cookbook: Practical Recipes for Visualizing Data, Publisher: O’Reilly Media, 2002,416 p. Site: http://shop.oreilly.com/pesouct/0636920023135.do

Este capítulo foi baseado no livro Conhecendo o R: Um visão mais que estatística, e na página do Prof. Paulo Justiniando Ribeiro