Esta aula tem como principal referência bibliográfica o livro: Ciência de dados com o R: Introdução
OLIVEIRA, Paulo Felipe de; GUERRA, Saulo; MCDONNELL, Robert. Ciência de Dados com R - Introdução. Brasília: Editora IBPAD, 2018
O ggplot2 é mais um pacote desenvolvido por Hadley Wickham, o criador, por exemplo, do tidyr e do dplyr. A ideia do pacote, ainda que com algumas modificações, vem de uma obra chamada The Grammar of Graphics, que é uma maneira de descrever um gráfico a partir dos seus componentes. Dessa forma, teoricamente, ficaria mais fácil entender a construção de gráficos mais complexos.
– Esse pacote é estruturado de forma que a “gramática” seja utilizada para um gráfico a partir de múltiplas camadas.
– As camadas serão formadas por dados, mapeamentos estéticos, transformações estatísticas dos dados, objetos geométricos (pontos, linhas, barras etc.) e ajuste de posicionamento.
– Além disso, existem outros componentes, como os sistemas de coordenadas (cartesiano, polar, mapa etc.) e, se for o caso, divisões do gráfico em subplots (facet). Um simples exemplo de múltiplas camadas seria um gráfico de pontos adicionado de uma curva de ajustamento.
Uma forma geral (template) para entender-se a estrutura do ggplot2, segundo o próprio Hadley Wickhan, no livro R for Data Science, é a seguinte:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>
) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION> # dividir o gráfico em subplots
A ideia é que todo gráfico pode ser representado por essa forma. No entanto, na criação de um gráfico, não é necessário especificar-se todas as partes acima.
O ggplot2 já oferece um padrão para o sistema de coordenadas, para o stat e position.
O facet (subplot) só será utilizado quando necessário.
Além disso, existem as escalas que são utilizadas para controlar o mapeamento dos dados em relação aos atributos estéticos do gráfico. Por exemplo: suponha que no seu gráfico exista uma coluna que é uma variável categórica com três classes possíveis e as cores do objeto geométrico estejam associadas a essa variável. Automaticamente, o ggplot2 definirá uma cor pra cada classe. No entanto, você pode alterar a escala de cores para ter controle sobre elas. O mesmo vale para os valores apresentados nos eixos x e y.
Uma observação importante é que apesar dos dados estarem na função ggplot() (<DATA>
), eles também podem ser incluídos diretamente em cada objeto geométrico. Isto será útil quando for necessário criar-se uma nova camada a partir de dados diferentes daqueles que estão inicialmente nos gráficos.
Dessa forma, incorporando essas observações, um template estendido seria o abaixo:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>,
data = <DATA> # pode receber os dados diretamente
) +
<SCALE_FUNCTION> + # uma para cada elemento estético
<COORDINATE_FUNCTION> +
<FACET_FUNCTION> # dividir o gráfico em subplots
Também é importante ressaltar-se que, como todo sistema de gráficos, é possível alterar-se todos os títulos e rótulos do gráfico, além do controle sobre as características do tema do gráfico (cor do fundo, estilo da fonte, tamanho da fonte etc).
Para quebrar-se a barreira inicial, vamos criar um exemplo por partes:
library(ggplot2)
data("mtcars")
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Um quadro de dados com 32 observações em 11 variáveis (numéricas).
mgp: milhas/galão (EUA)
cyl: Número de cilindros
disp: Deslocamento (cu.in.)
hp: Potência bruta
drat: Relação do eixo traseiro
wt: Peso (1000 lbs)
qsec: 1/4 milha hora
vs: Motor (0 = em forma de V, 1 = em linha reta)
am: Transmissão (0 = automático, 1 = manual)
gear: Número de marchas para frente
carb: Número de carburadores
# Inicia o plot
g <- ggplot(mtcars)
# Adicionar pontos (geom_point) e
# vamos mapear variáveis a elementos estéticos dos pontos
# Size = 3 define o tamanho de todos os pontos
g <- g +
geom_point(aes(x = hp, y = mpg, color = factor(am)),
size = 3)
g
# Altera a escala de cores
g <- g +
scale_color_manual("Automatic",
values = c("red", "blue"),
labels = c("No", "Yes"))
# Rótulos (títulos)
g <- g +
labs(title = 'Relação entre consumo, potência e tipo de câmbio',
y = 'Consumo',
x = 'Potência')
g
Note que o gráfico poderia ser criado com um bloco único de código:
ggplot(mtcars) +
geom_point(aes(x = hp, y = mpg, color = factor(am)),
size = 3) +
scale_color_manual("Automatic",
values = c("red", "blue"),
labels = c("No", "Yes")) +
labs(title = 'Relação entre consumo, potência e tipo de câmbio',
y = 'Consumo',
x = 'Potência')
Detalharemos cada parte do gráfico, mas vale falar-se rapidamente sobre o código acima. Primeiramente, passamos um conjunto de dados para o ggplot. Depois, adicionamos uma camada de pontos, mapeando as variáveis hp e mpg para as posições de cada ponto nos eixos x e y, respectivamente, e a variável am para a cor de cada ponto.
Em seguida, alteramos a escala de cor, definindo seu título, os rótulos (labels) e os valores (values) para as cores. Por fim, definimos os títulos/rótulos do gráfico.
Nas próximas seções, falaremos com mais detalhes sobre cada componente, começando pelo mapeamento estético.
E quais são as características visuais de um objeto geométrico? Abaixo segue uma lista não exaustiva:
Posição (x e y);
Cor (color);
Tamanho (size);
Preenchimento (fill);
Transparência (alpha);
Texto (label).
Como vimos no exemplo acima, mapeamos três variáveis para três características visuais de cada ponto: posição x, posição y e cor. Nos próximos exemplos, outros elementos estéticos serão utilizados, conforme o objeto geométrico selecionado.
Os objetos geométricos começam com a expressão geom_ e são seguidos pelo tipo de objeto.
Por exemplo, geom_point() para pontos e geom_bar() para barras.
A tabela abaixo apresenta os tipos de objetos geométricos utilizados para criar-se alguns tipos de gráficos populares.
Tipo | Objeto Geométrico |
---|---|
Dispersão (scatterplot) | geom_point() |
Gráfico de bolhas | geom_point() |
Gráfico de barras | geom_bar() e geom_col() |
Histograma | geom_histogram() |
Boxplot | geom_boxplot() |
Densidade | geom_density() |
Gráfico de linhas | geom_line() |
Nesse material, os principais tipos de objetos geométricos serão demonstrados a partir de exemplos. A lista completa de objetos geométricos e as descrições dos argumentos estão na documentação do ggplot2 (http://docs.ggplot2.org/current/).
-Vamos, primeiramente, criar um gráfico com pontos a partir dos dados mtcars. Use ?mtcars para mais detalhes.
g1 <- ggplot(mtcars, aes(y = mpg, x = disp)) +
geom_point()
g1
Note que o aes() está sendo usado diretamente na função ggplot() e não no objeto geométrico.
O que isto significa?
Que o mapeamento estético definido na função ggplot() é global. Ou seja, é aplicado para todos os objetos geométricos daquele gráfico, a menos que seja explicitado novamente em alguma camada.
Para finalizarmos essa breve introdução a objetos geométricos, adicionemos mais uma camada ao gráfico:
ggplot(mtcars, aes(y = mpg, x = disp)) +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess'
O controle sobre as escalas do gráfico é fundamental no ajuste de um gráfico.
Em geral, o ggplot2, como outros pacotes gráficos, fornece as escalas automaticamente, não sendo necessário o entendimento de como se controlar este componente.
No entanto, se o interesse é ter controle sobre todos os aspectos de um gráfico, esse componente é fundamental.
Veja o gráfico abaixo:
data(iris)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point()
Note que a cor está mapeada para a variável Species. O ggplot2, automaticamente, criou a seguinte escala:
Species | Cor |
---|---|
setosa | vermelho |
versicolor | verde |
virginica | azul |
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point() +
scale_color_manual(values = c("orange", "black", "red"))
Utilizamos a função scale_color_manual() em razão da variável Species ser categórica. Para o ggplot2, dados categóricos são discretos, e a função citada permite criar-se uma escala discreta customizada. No entanto, essa não é a única função para controlar escala de cor. Existem outras como scale_color_discrete(), scale_color_continuous(), scale_color_gradient() etc. A utilização de cada função depende do tipo de dado que se está associando ao elemento estético color. Adiante, entraremos em mais detalhes sobre os tipos de dados.
As funções utilizadas para controlar-se as escalas dos elementos de um gráfico do ggplot2 seguem um padrão. Todas iniciam-se com scale_, depois o nome do elemento estético (color, fill, x etc.) e, por fim, o tipo/nome da escala que será aplicada.
Abaixo, continuaremos o exemplo anterior, alterando as escalas dos eixos x e y. Note que as variáveis Petal.Length e Petal.Width são variáveis numéricas/contínuas. Dessa forma, utilizaremos as funções scale_x_continuous() e scale_y_continuous():
ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
geom_point() +
scale_color_manual(values = c("orange", "black", "red")) +
scale_x_continuous(name = "Petal Length", breaks = 1:7) +
scale_y_continuous(name = "Petal Width", breaks = 0:3, limits = c(0, 3))
scale_x_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(),
labels = waiver(), limits = NULL, expand = waiver(),
oob = censor, na.value = NA_real_, trans = "identity")
scale_y_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(),
labels = waiver(), limits = NULL, expand = waiver(),
oob = censor, na.value = NA_real_, trans = "identity")
library(ISLR)
## Warning: package 'ISLR' was built under R version 3.5.2
data(Wage)
head(Wage)
## year age maritl race education
## 231655 2006 18 1. Never Married 1. White 1. < HS Grad
## 86582 2004 24 1. Never Married 1. White 4. College Grad
## 161300 2003 45 2. Married 1. White 3. Some College
## 155159 2003 43 2. Married 3. Asian 4. College Grad
## 11443 2005 50 4. Divorced 1. White 2. HS Grad
## 376662 2008 54 2. Married 1. White 4. College Grad
## region jobclass health health_ins
## 231655 2. Middle Atlantic 1. Industrial 1. <=Good 2. No
## 86582 2. Middle Atlantic 2. Information 2. >=Very Good 2. No
## 161300 2. Middle Atlantic 1. Industrial 1. <=Good 1. Yes
## 155159 2. Middle Atlantic 2. Information 2. >=Very Good 1. Yes
## 11443 2. Middle Atlantic 2. Information 1. <=Good 1. Yes
## 376662 2. Middle Atlantic 2. Information 2. >=Very Good 1. Yes
## logwage wage
## 231655 4.318063 75.04315
## 86582 4.255273 70.47602
## 161300 4.875061 130.98218
## 155159 5.041393 154.68529
## 11443 4.318063 75.04315
## 376662 4.845098 127.11574
Descrição
ggplot(Wage, aes(x = age, y = wage, color = education)) +
geom_point() +
scale_x_continuous("Idade", breaks = seq(0, 80, 5),
expand = c(0, 5)) +
scale_y_continuous("Salário", labels = function(x) paste0("US$ ", x),
limits = c(0, 400))
Para o eixo x, determinamos que as quebras (breaks) acontecem a cada 5 anos. O expand(0,0) é um argumento que controla os espaços adicionais no final do gráfico. É preciso fornecer-se um vetor de tamanho 2, com uma constante multiplicativa e outra aditiva. No exemplo acima, eliminamos a expansão.
Para o eixo y, informamos que o nome do eixo é Salário, que os limites inferior e superior são 0 e 400 e alteramos os rótulos. No caso, passamos uma função que concatena US$ com o valor que já seria exibido. Note que, sabendo de antemão todos os breaks, é possível definir-se manualmente os labels. Veremos isso no exemplo com variáveis categóricas, no entanto, para variáveis contínuas, o uso de funções parece mais apropriado.
Apesar do help não apresentar todos os argumentos para as escalas discretas, podemos usar quase todos que foram listados para escala contínua.
data(Default)
head(Default)
## default student balance income
## 1 No No 729.5265 44361.625
## 2 No Yes 817.1804 12106.135
## 3 No No 1073.5492 31767.139
## 4 No No 529.2506 35704.494
## 5 No No 785.6559 38463.496
## 6 No Yes 919.5885 7491.559
Um conjunto de dados simulado contendo informações sobre dez mil clientes. O objetivo aqui é prever quais clientes irão inadimplir em suas dívidas de cartão de crédito.
default: Um fator com os níveis Não e Sim, indicando se o cliente deixou de pagar sua dívida
student: Um fator com os níveis Não e Sim, indicando se o cliente é um aluno
balance: O saldo médio que o cliente tem em seu cartão de crédito depois de efetuar o pagamento mensal
income: Renda do cliente
ggplot(Default, aes(x = default, y = balance)) +
geom_boxplot() +
scale_x_discrete("Calote", labels = c("Não", "Sim")) +
labs(y = "Valor devido médio após o pagamento mensal")
ggplot(Default, aes(x = default, y = balance)) +
geom_boxplot() +
scale_x_discrete("Calote", limits = c("Yes", "No"),
labels = c("Sim", "Não")) +
labs(y = "Valor devido médio após o pagamento mensal")
Quando estamos trabalhando com séries temporais, é comum que datas sejam associadas a algum eixo do grafico, geralmente ao eixo x. As funções padrão para controle de escalas dos eixos, para variáveis de datas, são as seguintes:
data(economics)
head(economics)
## # A tibble: 6 x 6
## date pce pop psavert uempmed unemploy
## <date> <dbl> <int> <dbl> <dbl> <int>
## 1 1967-07-01 507. 198712 12.5 4.5 2944
## 2 1967-08-01 510. 198911 12.5 4.7 2945
## 3 1967-09-01 516. 199113 11.7 4.6 2958
## 4 1967-10-01 513. 199311 12.5 4.9 3143
## 5 1967-11-01 518. 199498 12.5 4.7 3066
## 6 1967-12-01 526. 199657 12.1 4.8 3018
ggplot(economics, aes(x = date, y = unemploy)) +
geom_line()
Agora, suponha que queremos alterar o gráfico para o formato “Jan/1970”:
O **scale_ _date** é utilizado para variáveis do tipo Date e *scale_ _datetime* para variáveis do tipo POSIXct. A classe POSIXct aceita informações relacionadas a tempo/horário e a classe Date aceita apenas dia, mês e ano.
ggplot(economics, aes(x = date, y = unemploy)) +
geom_line() +
scale_x_date(date_labels = "%b/%Y")
O %b/%Y é usado para definir-se o formato de data desejado. Para ver a lista de formatos, use help(strptime).
Para os breaks, temos duas opções: utilizar-se o argumento breaks, informando um vetor de datas, ou usar-se o argumento date_breaks, em que se informa a frequência dos breaks (por exemplo, “1 month” e “5 years”). Veja os exemplos abaixos:
ggplot(economics, aes(x = date, y = unemploy)) +
geom_line() +
scale_x_date(date_breaks = "5 years", date_labels = "%Y")
O ggplot2 facilita a criação de subplots nos casos em que se deseja replicar o mesmo gráfico para um conjunto de valores de outra variável. Por exemplo, criar um gráfico da série temporal de desemprego para cada unidade da federação. As duas principais funções são facet_wrap() e facet_grid().
Antes de mais nada, vamos criar um exemplo para o facet_wrap():
data("diamonds")
head(diamonds)
## # A tibble: 6 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
Um conjunto de dados contendo os preços e outros atributos de quase 54.000 diamantes.
carat: peso do diamante (0,2-5,01)
price: preço em dólares americanos
cut: qualidade do corte (Justo (Fair), Bom (Good), Muito Bom (Very Good), Premium (Premium), Ideal (Ideal))
ggplot(diamonds, aes(x = carat, y = price)) +
geom_point()
ggplot(diamonds, aes(x = carat, y = price)) +
geom_point() +
facet_wrap(~ cut)
ggplot(diamonds, aes(x = carat, y = price)) +
geom_point() +
facet_grid(clarity ~ cut)
Parte das alterações das legendas pode ser feita via theme().
Essas alterações são gerais para todas as legendas. Se o interesse for em mudanças pontuais na legenda de algum elemento estético, serão utilizadas as funções guides(), guide_legend() e guide_colorbar().
ggplot(diamonds, aes(x = carat, y = price, color = cut, shape = cut)) +
geom_point() +
guides(color = guide_legend(title = "Cor", title.position = "left", keywidth = 5),
shape = guide_legend(title = "Forma", title.position = "right", override.aes = aes(size = 5)))
ggplot(diamonds, aes(x = carat, y = price, color = cut, shape = cut)) +
geom_point() +
guides(color = guide_legend(title = "Cor", title.position = "left", keywidth = 5),
shape = "none")
Como queremos um gráfico de pontos, o objeto geométrico natural é o geom_point().
require(gapminder)
## Loading required package: gapminder
## Warning: package 'gapminder' was built under R version 3.5.2
data(gapminder)
head(gapminder)
## # A tibble: 6 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
gapminder1 <- subset(gapminder, year==max(year))
ggplot(gapminder1, aes(x = gdpPercap, y = lifeExp)) +
geom_point() +
labs(title = "Relação entre Renda per Capita e Expectativa de Vida - 2007",
x = "Renda per Capita",
y = "Expectativa de Vida")
É assim que, usualmente, essa relação é apresentada. Para isso, poderíamos aplicar a função log10() na variável de renda per capita, ou utilizarmos a função scale_x_log10():
ggplot(gapminder1, aes(x = gdpPercap, y = lifeExp)) +
geom_point() +
scale_x_log10() +
labs(title = "Relação entre Renda per Capita e Expectativa de Vida - 2007",
x = "Renda per Capita (escala log 10)",
y = "Expectativa de Vida")
Com essa escala, valores incrementados na ordem de dez vezes serão igualmente espaçados. Nesse caso, a relação parece ser mais linear, ou seja, ao aumentarmos a renda dez vezes, espera-se que a expectativa de vida cresça a uma taxa constante.
Vamos mapear a variável continent ao elemento estético color e shape:
ggplot(gapminder1, aes(x = gdpPercap, y = lifeExp,
color = continent, shape = continent)) +
geom_point() +
scale_x_log10() +
scale_color_discrete("Continente") +
scale_shape_discrete("Continente") +
labs(title = "Relação entre Renda per Capita e Expectativa de Vida - 2007",
x = "Renda per Capita (escala log 10)",
y = "Expectativa de Vida")
Automaticamente o ggplot2 criou uma escala para as cores e formatos dos pontos. O usuário pode alterar este mapeamento utilizando as funções *scale_ _*.
Perceba que os formatos de 21 a 24 possuem preenchimento (fill). Assim, no código abaixo definiremos o preenchimento, o tamanho do ponto e a espessura para aqueles formatos que possuem contornos.
ggplot(gapminder1, aes(x = gdpPercap, y = lifeExp,
color = continent, shape = continent)) +
geom_point(fill = "black", size = 3, stroke = 1) +
scale_x_log10() +
scale_color_discrete("Continente") +
scale_shape_manual("Continente", values = c(19, 21, 22, 23, 24)) +
labs(title = "Relação entre Renda per Capita e Expectativa de Vida - 2007",
x = "Renda per Capita (escala log 10)",
y = "Expectativa de Vida")
O gráfico de bolha é uma extensão natural do gráfico de pontos.
Ele permite observar-se possíveis relações entre as três variáveis. Para este tipo de gráfico, são necessárias três variáveis: duas para indicarem as posições x e y e uma terceira para definir o tamanho do ponto (size). Vamos utilizar a variável pop (população):
ggplot(gapminder1, aes(x = gdpPercap, y = lifeExp,
size = pop)) +
geom_point() +
scale_size_continuous("População (milhões)",
labels = function(x) round(x/1000000)) +
scale_x_log10() +
labs(title = "Relação entre Renda per Capita e Expectativa de Vida - 2007",
x = "Renda per Capita (escala log 10)",
y = "Expectativa de Vida")
ggplot(diamonds, aes(x = cut)) +
geom_bar()
gapminder2 <- subset(gapminder, continent == "Americas" & year==2007)
ggplot(gapminder2, aes(x = country, y = lifeExp)) +
geom_col(fill = "dodgerblue") +
labs(title = "Expectativa de vida por país",
subtitle = "2007",
x = "País",
y = "Anos")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggplot(gapminder2, aes(x = reorder(country, -lifeExp), y = lifeExp)) +
geom_col(fill = "dodgerblue") +
labs(title = "Expectativa de vida por país",
subtitle = "2007",
x = "País",
y = "Anos") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
data(gapminder)
gapminder3 <- subset(gapminder, year %in% c(1957, 2007))
gap3 <- aggregate(lifeExp ~ continent + year, data=gapminder3, FUN=mean)
ggplot(gap3, aes(x = continent, y = lifeExp, fill = factor(year))) +
geom_col(position = "stack")
Para continente, o gráfico empilhou as barras. Isto se deve ao argumento position = stack.
Para colocar as barras lado a lado, utilizamos o valor “dodge”:
ggplot(gap3, aes(x = continent, y = lifeExp, fill = factor(year))) +
geom_col(position = "dodge") +
labs(title = "Expectativa de vida por continente",
x = "Continente",
y = "Anos",
fill = "Ano")
ggplot(gap3, aes(x = continent, y = lifeExp, fill = factor(year))) +
geom_col(position = "dodge") +
labs(title = "Expectativa de vida por continente",
x = "Continente",
y = "Anos",
fill = "Ano")+
coord_flip()
Os gráficos de linhas são, geralmente, utilizados para apresentar-se a evolução de uma variável quantitativa em um intervalo de tempo.
gap4 <- aggregate(lifeExp ~ continent + year, data=gapminder, FUN=mean)
ggplot(gap4, aes(x = year, y = lifeExp, color = continent)) +
geom_line() +
labs(title = "Evolução da expectativa de vida por continente",
x = "Ano",
y = "Anos de vida",
color = "Continente")
ggplot(gap4, aes(x = year, y = lifeExp, color = continent)) +
geom_line() +
geom_point(aes(shape = continent)) +
labs(title = "Evolução da expectativa de vida por continente",
x = "Ano",
y = "Anos de vida",
color = "Continente",
shape = "Continente")+
theme_bw()
Os histogramas são utilizados para representar-se a distribuição de dados de uma variável quantitativa em intervalos contínuos.
Esses intervalos são chamados de bins. Para cada bin, será apresentada a quantidade de valores que estão naquele intervalo.
A diferença para o geom_freqpoly é que este utiliza linhas para construir polígonos, enquanto o geom_histogram utiliza barras.
Conforme a documentação do ggplot2, o geom_histogram() utiliza os mesmos elementos estéticos do geom_bar(). Já o geom_freqpoly() utiliza os mesmo do geom_line().
gap5 <- subset(gapminder, year %in% 2007)
ggplot(gap5, aes(x = lifeExp)) +
geom_histogram(binwidth = 5, fill = 'dodgerblue',
color = 'black') +
labs(title = "Distribuição da expectativa vida",
x = "Anos",
y = "Frequência") +
theme_light()
gap5 <- subset(gapminder, year %in% 2007)
ggplot(gap5, aes(x = lifeExp)) +
geom_freqpoly(binwidth = 5) +
labs(title = "Distribuição da expectativa vida",
x = "Anos",
y = "Frequência")+
theme_light()
ggplot(gap5, aes(x = lifeExp)) +
geom_histogram(aes(y = ..count../sum(..count..)),
binwidth = 5, fill = 'dodgerblue', color = 'black') +
labs(title = "Distribuição da expectativa vida",
x = "Anos",
y = "Proporção") +
scale_y_continuous(labels = scales::percent_format()) +
theme_classic()
O boxplot é uma representação comum para apresentar-se a distribuição de uma variável a partir de seus quantis.
O boxplot também pode ser usado para verificar-se a distribuição de variável para um conjunto de valores de uma segunda variável. Por exemplo: qual é a distribuição da expectativa de vida por ano?
ggplot(gapminder, aes(x = factor(year), y = lifeExp)) +
geom_boxplot(fill = "dodgerblue") +
labs(y = "Anos de vida",
x = "Ano",
title = "Distribuição da expectativa de vida por ano")
subset(gapminder, lifeExp==min(lifeExp))
## # A tibble: 1 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Rwanda Africa 1992 23.6 7290203 737.
ggplot(gapminder, aes(x = factor(year), y = lifeExp)) +
geom_boxplot(fill = "dodgerblue") +
annotate("text", x = "1992", y = 27, label = "Ruanda") +
labs(y = "Anos de vida",
x = "Ano",
title = "Distribuição da expectativa de vida por ano")
Lista 2
https://www.dropbox.com/s/goy4bqbn13rp4g4/Atividade_aula_2.docx?dl=0