## Loading required package: grid

GGplot2 é um pacote de visualização de dados que pode ser utilizado junto à ferramenta R. Esta biblioteca é um conjunto de componentes independentes que podem ser aplicados de várias formas, construindo gráficos de maneira incremental.

“A general scheme for data visualization which breaks up graphs into semantic components such as scales and layers. Ggplot2 can serve as a replacement for the base graphics in R and contains a number of defaults for web and print display of common scales”.

Instalação e carregamento do pacote

A instalação e utilização da biblioteca no RStudio é feita da seguinte maneira, respectivamente (retire a #):

#install.packages("ggplot2")

#library(ggplot2)

Criando o primeiro plot

Neste primeiro momento utilizaremos uma base de dados padrão do R, Íris - para mais informações: help(iris).

# Carrega a base de dados em iris
iris <- iris

# Breve sumário sobre os dados
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500

Diferente de outras bibliotecas ggplot2, não é verborrágico e a geração dos gráficos utiliza o conceito de camadas. Podemos ‘guardar’ gráficos em variáveis, adicionar outras camadas, modificar as já existentes e finalmente, plotar o gráfico.
Para construção dos plots dispomos de elementos gráficos tais como:

E cada um desses elementos possuem suas próprias características (aesthetics). Por exemplo:

Então, simplesmente temos:

a <- ggplot(data=iris, aes(x=Sepal.Length, y=Petal.Length, shape = Species)) 
a <- a + geom_point(size=4)
# Plot do gráfico
a

Explicando melhor o comando acima:

“The first argument to ggplot() is a data frame (it must be a data frame), and its second argument is aes(). It might be best not to think of aes() as its own function, but rather as a special way of defining data-to-aesthetic mappings.”

Como incremento do gráfico acima podemos também definir labels para os eixos, cores, titulo, dentre outras propriedades.

# ggplot(data=iris, aes(x=Sepal.Length, y=Petal.Length, shape = Species)) + geom_point(size=4, aes(colour=Species)) + xlab("Tamanho da Sépala") + ylab("Tamanho da Pétala") + ggtitle("Íris")

# Ou 

# ggplot(data=iris, aes(x=Sepal.Length, y=Petal.Length, shape = Species, col = Species)) + geom_point(size=4, aes(colour=Species)) + xlab("Tamanho da Sépala") + ylab("Tamanho da Pétala") + ggtitle("Íris")

# No caso em que utilizemos várias camadas como a 'geom_point()' é necessário que informemos novamente quem serão os eixos x e y, por exemplo:

ggplot(iris) + geom_point(aes(x=Sepal.Length, y=Petal.Length)) + geom_point(size=4, aes(x=Sepal.Length, y=Petal.Length, col=Species, shape=Species)) + xlab("Tamanho da Sépala") + ylab("Tamanho da Pétala") + ggtitle("Íris")

# Podemos até mesmo transformar variáveis diretamente no próprio ggplot2 (repare na escala)

ggplot(iris) + geom_point(aes(x=log(Sepal.Length), y=Petal.Length*10, shape = Species, colour=Species), size=5, alpha=0.5) + xlab("Tamanho da Sépala") + ylab("Tamanho da Pétala") + ggtitle("Íris")

Outra forma de analisar nossos dados é separá-los em gráficos distintos, para tanto podemos utilizar facets, isso nos dará vários plots.

ggplot(iris, aes(x=Sepal.Length, y=Petal.Length, col=Species, shape=Species)) + geom_point(size=4, alpha=0.4) + facet_wrap(~Species) + xlab("Tamanho da Sépala") + ylab("Tamanho da Pétala") + ggtitle("Espécies ~ Íris")


Acima demonstramos apenas como se dá a construção de gráficos que não necessariamente passam alguma informação.
Na construção de gráficos é importante identificar qual pergunta queremos responder com aquela representação e quais informações da base de dados utilizar para melhor responder essa pergunta. A escolha do(s) elemento(s) geométrico(s) utilizados deverá ser baseada na resposta que desejamos proporcionar.
Nos exemplos abaixo veremos outros tipos de gráfico e como construí-los.

Outros exemplos

Utilizaremos também uma outra base de dados padrão do R, Economics - para mais informações: help(economics).

economics <- economics
ggplot(economics, aes(psavert)) + geom_histogram(binwidth = diff(range(economics$psavert))/30) + geom_histogram(aes(fill=..count..)) # + scale_y_reverse() # + scale_fill_gradient("Count", low="red", high="blue")
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

ggplot(economics, aes(x=date, y=unemploy)) + geom_line() + xlab("Ano") + ylab("Desemprego (em milhares)") + ggtitle("Desemprego - Economics") # + geom_smooth() # + geom_smooth(method=lm)

ggplot(economics, aes(x=date, y=pop)) + geom_line() + xlab("Ano") + ylab("População (em milhares)") + ggtitle("População - Economics") geom_smooth() # + geom_smooth(method=lm)

ggplot(iris, aes(Sepal.Width)) + geom_bar(aes(fill="pink")) 
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

A função grid.arrange() necessita da instalação do pacote gridExtra.

ggplot(economics) + geom_density(aes(pop), alpha = 0.6)

a <- ggplot(iris, aes(Sepal.Length, fill=Species)) + geom_density(alpha = 0.6) + facet_grid(. ~ Species)
b <- ggplot(iris, aes(Sepal.Width, fill=Species)) + geom_density(alpha = 0.6) + facet_grid(. ~ Species)
c <- ggplot(iris, aes(Petal.Length, fill=Species)) + geom_density(alpha = 0.6) + facet_grid(. ~ Species)
d <- ggplot(iris, aes(Sepal.Width, fill=Species)) + geom_density(alpha = 0.6) + facet_grid(. ~ Species)
grid.arrange(a, b, c, d) # gridExtra package required

e <- ggplot(iris, aes(Sepal.Length, fill=Species)) + geom_density(alpha = 0.6) 
f <- ggplot(iris, aes(Sepal.Width, fill=Species)) + geom_density(alpha = 0.6) 
g <- ggplot(iris, aes(Petal.Length, fill=Species)) + geom_density(alpha = 0.6)
h <- ggplot(iris, aes(Sepal.Width, fill=Species)) + geom_density(alpha = 0.6)

multiplot(e, f, g, h, cols=2) # multiplot function required

ggplot(iris, aes(Sepal.Length, fill = Species))+ geom_density(position = "stack", aes(y = ..count..))

ggplot(iris, aes(Sepal.Length, fill = Species))+ geom_density(position = "fill", aes(y = ..count..))

ggplot(iris, aes(Sepal.Length, Petal.Length, color = Species))+ geom_point() + geom_line()

“Todas as formas geométricas começam com geom_, vocẽ pode descobrir a lista inteira usando apropos(): apropos(”^geom_“).”


Referências:


Todos os datasets utilizados neste tutorial são nativos do próprio R (iris e economics), isso significa que você pode replicá-lo em casa e fazer as modificações que deseje. :)