Diferente dos gráficos de base, o ggplot usa quadros de dados e não vetores individuais. Todos os dados necessários para fazer o gráfico geralmente estão contidos no quadro de dados fornecido ao ggplot() próprio ou podem ser fornecidos aos respectivos geoms.
O segundo recurso perceptível é que você pode continuar aprimorando a plotagem adicionando mais camadas (e temas) a uma plotagem existente criada usando a ggplot() função.
# Setup
options(scipen=999) # turn off scientific notation like 1e+06
library(ggplot2)
data("midwest", package = "ggplot2") # load the data
# midwest <- read.csv("http://goo.gl/G1K41K") # alt source
# Init Ggplot
ggplot(midwest, aes(x=area, y=poptotal)) # area and poptotal are columns in 'midwest'
Um ggplot em branco é desenhado. Mesmo que o x e y são especificados, não há pontos ou linhas nele. Isso ocorre porque o ggplot não assume que você quisesse desenhar um gráfico de dispersão ou um gráfico de linhas.
Só informamos ao ggplot qual conjunto de dados usar e quais colunas devem ser usadas para os eixos X e Y.
Observe também que a função aes() é usada para especificar os eixos X e Y. Isso porque qualquer informação que faça parte do dataframe de origem deve ser especificada dentro da função aes().
Vamos usar uma camada geom chamada geom_point.
library(ggplot2)
ggplot(midwest, aes(x=area, y=poptotal)) + geom_point()
Temos um gráfico de dispersão básico, em que cada ponto representa um município.
Faltam alguns componentes, como o título, rótulos dos eixos e outros. E, além disso, a maioria dos pontos está concentrada na parte inferior da plotagem.
Vamos apenas adicionar uma camada de suavização usando geom_smooth(method=‘lm’). Como method é definido como lm (abreviação de modelo linear ), ele desenha a linha de melhor ajuste.
library(ggplot2)
g <- ggplot(midwest, aes(x=area, y=poptotal)) + geom_point() + geom_smooth(method="lm") # set se=FALSE to turnoff confidence bands
plot(g)
A linha de ajuste é a azul.
Agora ajeitaremos os limites do eixo Y e vamos focar na metade inferior, para melhorar a visualização dos dados.
Os limites dos eixos X e Y podem ser controlados de duas maneiras.
Vai alterar as linhas de ajuste ou a de suavização, e pode ser feito usando xlim()ou ylim()
library(ggplot2)
g <- ggplot(midwest, aes(x=area, y=poptotal)) + geom_point() + geom_smooth(method="lm") # set se=FALSE to turnoff confidence bands
# Delete the points outside the limits
g + xlim(c(0, 0.1)) + ylim(c(0, 1000000)) # deletes points
## Warning: Removed 5 rows containing non-finite values (stat_smooth).
## Warning: Removed 5 rows containing missing values (geom_point).
# g + xlim(0, 0.1) + ylim(0, 1000000) # deletes points
Note que o gráfico não foi construído a partir do zero, mas em cima de g. Ocorre, pois o gráfico anterior foi armazenado como g um objeto ggplot, que quando chamado, reproduz o gráfico original. Usando o ggplot, você pode adicionar mais camadas, temas e outras configurações na parte superior deste gráfico.
Note, também, que a linha de melhor ajuste se tornou mais horizontal em comparação com o gráfico original.
Isso ocorre porque, ao usar xlim() e ylim(), os pontos fora do intervalo especificado são excluídos e não serão considerados ao desenhar a linha de melhor ajuste.
O outro método é alterar os limites dos eixos X e Y, ampliando a região de interesse sem excluir os pontos. Isso é feito usando coord_cartesian().
Vamos armazenar esse gráfico como g1.
library(ggplot2)
g <- ggplot(midwest, aes(x=area, y=poptotal)) + geom_point() + geom_smooth(method="lm") # set se=FALSE to turnoff confidence bands
# Zoom in without deleting the points outside the limits.
# As a result, the line of best fit is the same as the original plot.
g1 <- g + coord_cartesian(xlim=c(0,0.1), ylim=c(0, 1000000)) # zooms in
plot(g1)
Como todos os pontos foram considerados, a linha de melhor ajuste não mudou.
Adicionaremos o título da plotagem e os rótulos para os eixos X e Y. Isso pode ser feito de uma só vez, usando a função labs() com title, x e y argumentos. Outra opção é usar o ggtitle(), xlab()e ylab().
library(ggplot2)
g <- ggplot(midwest, aes(x=area, y=poptotal)) + geom_point() + geom_smooth(method="lm") # set se=FALSE to turnoff confidence bands
g1 <- g + coord_cartesian(xlim=c(0,0.1), ylim=c(0, 1000000)) # zooms in
# Add Title and Labels
#g1 + labs(title="Area Vs Population", subtitle="From midwest dataset", y="Population", x="Area", caption="Midwest Demographics")
# or
g1 + ggtitle("Area Vs Population", subtitle="From midwest dataset") + xlab("Area") + ylab("Population")
O mesmo gráfico pode ser montado de maneira direta:
# Full Plot call
library(ggplot2)
ggplot(midwest, aes(x=area, y=poptotal)) +
geom_point() +
geom_smooth(method="lm") +
coord_cartesian(xlim=c(0,0.1), ylim=c(0, 1000000)) +
labs(title="Area Vs Population", subtitle="From midwest dataset", y="Population", x="Area", caption="Midwest Demographics")
Podemos mudar a estética de uma camada de geom modificando os respectivos geoms. Vamos mudar a cor dos pontos e da linha para um valor estático.
library(ggplot2)
ggplot(midwest, aes(x=area, y=poptotal)) +
geom_point(col="steelblue", size=3) + # Set static color and size for points
geom_smooth(method="lm", col="firebrick") + # change the color of line
coord_cartesian(xlim=c(0, 0.1), ylim=c(0, 1000000)) +
labs(title="Area Vs Population", subtitle="From midwest dataset", y="Population", x="Area", caption="Midwest Demographics")
Mudar a cor com base em outra coluna no conjunto de dados de origem (midwest), ela deve ser especificada dentro da função aes().
library(ggplot2)
gg <- ggplot(midwest, aes(x=area, y=poptotal)) +
geom_point(aes(col=state), size=3) + # Set color to vary based on state categories.
geom_smooth(method="lm", col="firebrick", size=2) +
coord_cartesian(xlim=c(0, 0.1), ylim=c(0, 1000000)) +
labs(title="Area Vs Population", subtitle="From midwest dataset", y="Population", x="Area", caption="Midwest Demographics")
plot(gg)
Além disso, você pode alterar completamente a paleta de cores.
gg + scale_colour_brewer(palette = "Set1") # change color palette
Mais dessas paletas podem ser encontradas no pacote RColorBrewer
library(RColorBrewer)
head(brewer.pal.info, 10)
## maxcolors category colorblind
## BrBG 11 div TRUE
## PiYG 11 div TRUE
## PRGn 11 div TRUE
## PuOr 11 div TRUE
## RdBu 11 div TRUE
## RdGy 11 div FALSE
## RdYlBu 11 div TRUE
## RdYlGn 11 div FALSE
## Spectral 11 div FALSE
## Accent 8 qual FALSE
{http://r-statistics.co/Complete-Ggplot2-Tutorial-Part1-With-R-Code.html}
Schmuller, Joseph. Análise Estatística com R - Para leigos - Tradução da 2a edição. Alta Books Editora. 2019.
Oliveira, Paulo; Guerra, Saulo; McDonnell, Robert. Ciência de Dados com R. Introdução.Editora IBPAD. Brasília. 2018. Disponível em: {https://cdr.ibpad.com.br/cdr-intro.pdf}