## 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”.
A instalação e utilização da biblioteca no RStudio é feita da seguinte maneira, respectivamente (retire a #):
#install.packages("ggplot2")
#library(ggplot2)
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:
a <- … : ‘Guarda’ em a o objeto do plot;
ggplot(data=iris, …): Inicia o objeto ggplot e define a base de dados a ser usada naquele plot;
aes (Aesthetics): Descreve como as variáveis dos dados são mapeadas para elementos visuais. Neste caso o eixo x representará o Tamanho da Sépala (Sepal.Length), o eixo y o Tamanho da Pétala (Petal.Length) e a forma do ponto (shape) dependerá da Espécie (Specie) da flor;
geom_point(…): Espeficica o tipo de gráfico que estamos construindo, neste caso um gráfico de pontos ou gráfico de dispersão - scatterplot;
Utilizando o operador ‘+’ pode-se adicionar camadas ao objeto ggplot criado 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.
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_“).”
Manual completo - http://cran.r-project.org/web/packages/ggplot2/ggplot2.pdf
http://stackoverflow.com/questions/11657380/is-there-a-table-or-catalog-of-aesthetics-for-ggplot2
http://blog.echen.me/2012/01/17/quick-introduction-to-ggplot2/
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. :)