Esta aula tem como principal referência bibliográfia 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, consiste em 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, é a seguinte:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>
) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION> # dividir o grafico 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çao 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:
Informações sobre estado civil, grau de instrução, número de filhos, salário (expresso como fração do salário mínimo), idade (medida em anos e meses) e procedência de 36 empregados da seção de orçamentos da Companhia MB.
Para baixar os dados a serem utilizados a seguir, faço o download em: Baixar dados
Entrando com os dados
library(openxlsx)
## Warning: package 'openxlsx' was built under R version 4.3.3
url1 = "https://www.dropbox.com/scl/fi/u6ovzuozkb00s9hwx32c2/Tabela_Bus2.xlsx?rlkey=rnv7g4sz6zfknovverq57v3oi&dl=1"
dados <- openxlsx::read.xlsx(url1)
head(dados)
## N Estado_Civil Grau_de_Instrucao N_de_Filhos Salario_Min Idade
## 1 1 solteiro ensino fundamental NA 4.00 26
## 2 2 casado ensino fundamental 1 4.56 32
## 3 3 casado ensino fundamental 2 5.25 36
## 4 4 solteiro ensino médio NA 5.73 20
## 5 5 solteiro ensino fundamental NA 6.26 40
## 6 6 casado ensino fundamental 0 6.66 28
## Regiao_de_Procedencia
## 1 interior
## 2 capital
## 3 capital
## 4 outra
## 5 outra
## 6 interior
require(ggplot2)
## Carregando pacotes exigidos: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
# Inicia o plot
g <- ggplot(dados)
# 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 = Idade, y = Salario_Min, color = Estado_Civil),
size = 3)
g
g <- g +
scale_color_manual("Estado Civil",
values = c("red", "blue"),
labels = c("Casado", "Solteiro"))
# Rótulos (títulos)
g <- g +
labs(title = 'Relação entre idade, salário mínimo e estado civil',
y = 'Idade',
x = 'Salário (R$)')
g
Note que o gráfico poderia ser criado com um bloco único de código:
ggplot(dados) +
geom_point(aes(x = Idade, y = Salario_Min, color = Estado_Civil),
size = 3) +
scale_color_manual("Estado Civil",
values = c("red", "blue"),
labels = c("Casado", "Solteiro")) +
labs(title = 'Relação entre idade, salário mínimo e estado civil',
y = 'Idade',
x = 'Salário (R$)')
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 Salário e Idade para as posições de cada ponto nos eixos x e y, respectivamente, e a variável Estado Civil 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/).
É importante saber-se que um gráfico do ggplot2 pode ter mais de um objeto geométrico, cada um formando uma camada. Por exemplo, uma camada de pontos e outra de linhas que conectam os pontos.
-Vamos, primeiramente, criar um gráfico com pontos a partir dos dados dos funcionários.
g1 <- ggplot(dados, aes(y = Idade, x = Salario_Min)) +
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(dados, aes(y = Idade, x = Salario_Min)) +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
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:
ggplot(dados, aes(x = Salario_Min, y = Idade, color = Grau_de_Instrucao)) +
geom_point()
Note que a cor está mapeada para a variável Grau de Instrução.
Todavia, é comum haver interesse em alterar-se essas cores, ou seja, alterar-se a escala de cor.
Como fazer isso no ggplot2?
Podemos usar, por exemplo, a função scale_color_manual():
ggplot(dados, aes(x = Salario_Min, y = Idade, color = Grau_de_Instrucao)) +
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 Salário e Idade são variáveis numéricas/contínuas.
Dessa forma, utilizaremos as funções scale_x_continuous() e scale_y_continuous():
ggplot(dados, aes(x = Salario_Min, y = Idade, color = Grau_de_Instrucao)) +
geom_point() +
scale_color_manual(values = c("orange", "black", "red")) +
scale_x_continuous(name = "Salário (R$)", breaks = seq(0,30,6)) +
scale_y_continuous(name = "Petal Width", breaks = seq(0,50,10), limits = c(0, 50))
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 4.3.3
data(Wage)
head(Wage)
## year age maritl race education region
## 231655 2006 18 1. Never Married 1. White 1. < HS Grad 2. Middle Atlantic
## 86582 2004 24 1. Never Married 1. White 4. College Grad 2. Middle Atlantic
## 161300 2003 45 2. Married 1. White 3. Some College 2. Middle Atlantic
## 155159 2003 43 2. Married 3. Asian 4. College Grad 2. Middle Atlantic
## 11443 2005 50 4. Divorced 1. White 2. HS Grad 2. Middle Atlantic
## 376662 2008 54 2. Married 1. White 4. College Grad 2. Middle Atlantic
## jobclass health health_ins logwage wage
## 231655 1. Industrial 1. <=Good 2. No 4.318063 75.04315
## 86582 2. Information 2. >=Very Good 2. No 4.255273 70.47602
## 161300 1. Industrial 1. <=Good 1. Yes 4.875061 130.98218
## 155159 2. Information 2. >=Very Good 1. Yes 5.041393 154.68529
## 11443 2. Information 1. <=Good 1. Yes 4.318063 75.04315
## 376662 2. Information 2. >=Very Good 1. Yes 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.
O conjunto de dados: Titanic
PassengerId: identificação do passageiro
Pclass: Classe de passageiro
Name: Nome
Sex: Sexo
Age: Idade
SibSp: Número de Irmãos / Cônjuges a bordo
Parch: Número de pais / crianças a bordo
Ticke: número do bilhete
Fare: tarifa do passageiro
Cabin: Cabine
Embarked: Porto de embarcação
Para baixar os dados a serem utilizados a seguir, faço o download em: Baixar dados
titanic <- read.csv2("C:/Users/eliasmedeiros/Dropbox/UFGD/2019_02_Disciplinas/Topicos_Estatistica_R/2_Aula/Dados_Aula_02/titanic.csv")
head(titanic)
## PassengerId Survived Pclass
## 1 1 0 C3
## 2 2 1 C1
## 3 3 1 C3
## 4 4 1 C1
## 5 5 0 C3
## 6 6 0 C3
## Name Sex Age SibSp Parch
## 1 Braund, Mr. Owen Harris male 22 1 0
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0
## 3 Heikkinen, Miss. Laina female 26 0 0
## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0
## 5 Allen, Mr. William Henry male 35 0 0
## 6 Moran, Mr. James male NA 0 0
## Ticket Fare Cabin Embarked
## 1 A/5 21171 7.2500 S
## 2 PC 17599 71.2833 C85 C
## 3 STON/O2. 3101282 7.9250 S
## 4 113803 53.1000 C123 S
## 5 373450 8.0500 S
## 6 330877 8.4583 Q
ggplot(titanic, aes(x = Sex, y = Fare)) +
geom_boxplot() +
scale_x_discrete("Sexo", labels = c("Feminino", "Masculino")) +
labs(y = "Tarifa do passageiro")
ggplot(titanic, aes(x = Sex, y = Fare)) +
geom_boxplot() +
scale_x_discrete("Sexo", limits = c("male", "female"),
labels = c("Masculino", "Feminino")) +
labs(y = "Tarifa do passageiro")
titanic$sv <- ifelse(titanic$Survived==0, "Não Sobriviveu", "Sobreviveu")
ggplot(titanic, aes(x = sv , y = Age)) +
geom_boxplot() +
scale_x_discrete("Survived") +
labs(y = "Idade do passageiro")
## Warning: Removed 177 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
Banco de Dados: DENGUE - Notificações registradas no Sistema de Informação de Agravos de Notificação - Mato Grosso do Sul, Ano de 2017
Para baixar os dados a serem utilizados a seguir, faço o download em: Baixar dados
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
Dengue_MS_2017 <- readxl::read_xlsx("C:/Users/eliasmedeiros/Dropbox/UFGD/2019_02_Disciplinas/Topicos_Estatistica_R/2_Aula/Dados_Aula_02/Dengue_MS_2017.xlsx")
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:
CG <- subset(Dengue_MS_2017, Municipio=="Campo Grande")
ggplot(CG, aes(x = Data, y = Notificacao)) +
geom_line()
Agora, suponha que queremos alterar o gráfico para o formato “janeiro/2017”:
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(CG, aes(x = Data, y = Notificacao)) +
geom_line() +
scale_x_datetime(date_labels = "%b/%Y", date_breaks = "1 month")
O %b/%Y foi 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(Dengue_MS_2017, aes(x = Data, y = Notificacao)) +
geom_line() +
facet_wrap(vars(Municipio))+
scale_x_datetime(date_labels = "%b/%Y", date_breaks = "1 month")+
theme(axis.text.x = element_text(angle= 90 , vjust= .5 , hjust= 1))
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 notificações de 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():
ggplot(dados) +
geom_point(aes(x = Idade, y = Salario_Min, color = Estado_Civil),
size = 3)+
facet_wrap(~ Grau_de_Instrucao)
Já o uso do facet_grid() é indicado para o cruzamento de variáveis.
No exemplo abaixo, a relação entre as variáveis Idade e Salário será “quebrada” para grupos formados pelas variáveis Estado Civil e Grau de Instrução:
ggplot(dados) +
geom_point(aes(x = Idade, y = Salario_Min),
size = 3)+
facet_wrap(Estado_Civil ~ Grau_de_Instrucao)
O gráfico de dispersão é bastante usado para verificar-se relações entre duas variáveis quantitativas. Para exemplificar, utilizaremos a base disponível no pacote gapminder.
Nesta base, existe uma variável de expectativa de vida e outra de renda per capita.
Como queremos um gráfico de pontos, o objeto geométrico natural é o geom_point().
require(gapminder)
## Carregando pacotes exigidos: gapminder
## Warning: package 'gapminder' was built under R version 4.3.3
data(gapminder)
head(gapminder)
## # A tibble: 6 × 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")
Note que a expectativa de vida cresce muito rápido para níveis de renda baixos, mas o incremento decresce conforme o nível de renda aumenta.
Esse fato pode ser melhor representado utilizando-se uma escala logarítmica para a variável renda per capita.
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çãoo (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(dados, aes(x = Grau_de_Instrucao )) +
geom_bar()
ggplot(Dengue_MS_2017, aes(x = Municipio, y = Notificacao)) +
geom_col(fill = "dodgerblue") +
labs(title = "Notificação de Dengue",
subtitle = "2017",
x = "Município",
y = "Notificação")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplot(Dengue_MS_2017, aes(x = reorder(Municipio, +Notificacao), y = Notificacao)) +
geom_col(fill = "dodgerblue") +
labs(title = "Notificação de Dengue",
subtitle = "2017",
x = "Município",
y = "Notificação")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplot(Dengue_MS_2017, aes(x = factor(Mes), y = Notificacao, fill = Municipio)) +
geom_col(position = "dodge") +
labs(title = "Notificação de Dengue em 2017",
x = "Mês",
y = "Notificação",
fill = "Municipio")
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.
ggplot(Dengue_MS_2017, aes(x = Mes, y = Notificacao, color = Municipio)) +
geom_line() +
scale_x_continuous(name = "Meses de 2017", breaks = 1:12)
ggplot(Dengue_MS_2017, aes(x = Mes, y = Notificacao, color = Municipio)) +
geom_line() +
scale_x_continuous(name = "Meses de 2017", breaks = 1:12)+
geom_point(aes(shape = Municipio))
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().
ggplot(dados, aes(x = Salario_Min)) +
geom_histogram(binwidth = 5, fill = 'dodgerblue',
color = 'black') +
labs(title = "Distribuição do Salário Mínimo",
x = "Anos",
y = "Frequência") +
theme_light()
ggplot(dados, aes(x = Salario_Min)) +
geom_freqpoly(binwidth = 5) +
labs(title = "Distribuição do Salário Mínimo",
x = "Anos",
y = "Frequência") +
theme_light()
ggplot(dados, aes(x = Salario_Min)) +
geom_histogram(aes(y = ..count../sum(..count..)),
binwidth = 5, fill = 'dodgerblue',
color = 'black') +
labs(title = "Distribuição do Salário Mínimo",
x = "Anos",
y = "Proporção") +
theme_light()
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
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 do salário mínimo por estado civil?
ggplot(dados, aes(x = Estado_Civil, y = Salario_Min)) +
geom_boxplot(fill = "dodgerblue") +
labs(y = "Salário Mínimo",
x = "Estado Civil",
title = "Distribuição do salário mínimo por estado civil")
ggplot(dados, aes(x = Estado_Civil, y = Salario_Min)) +
geom_boxplot(fill = "dodgerblue") +
annotate("text", x = "solteiro", y = 18.5, label = "Anota Algo") +
labs(y = "Salário Mínimo",
x = "Estado Civil",
title = "Distribuição do salário mínimo por estado civil")