Capítulo 7 Construindo gráficos com o ggplot2
Hadley Wickham, junto com alguns colaboradoes, criaram o pacote ggplot2 com o intuíto de fornercer ao usuário do R uma ferramenta capaz de executar um “modelo poderoso para a produção de gráficos complexos de múltiplas camadas”.
Quais as principais vantagens do ggplot2?
- Gramática de gráficos consistente;
- Especificação de plotagem em um alto nível de abstração;
- Muito flexível;
- Sistema de temas para polir a aparência do gráfico;
- Sistema gráfico completo e maduro.
Dito isto, existem algumas coisas que você não pode (ou não deve) fazer com o ggplot2, pois existem outros pacotes apropriados no R:
- Gráficos tridimensionais (veja o pacote RGL);
- Gráficos de tipos de teoria de grafos (veja o pacote igraph);
- Gráficos interativos (veja o pacote ggvis).
Qual é gramática dos gráficos?
Idéia básica: especificar separadamente blocos de construção de plotagem e combiná-los para criar qualquer tipo de exibição gráfica que você deseja.
Os blocos de construção de um gráfico incluem:
- Dados;
- Mapeamento estético;
- Objeto geométrico;
- Transformações estatísticas;
- Escalas;
- Ajustes de posição;
- Facetas, entre outros.
A estrutura básica de código para criar um ggplot é a seguinte:
ggplot(data = meu_data_frame, mapping = aes(x, y)) + geom_???()
Primeiro criamos um plot com a função ggplot
. O primeiro argumento é o data
, onde você especifica o tibble (base de dados) com suas variáveis. Depois vem o mapping
. Nele você cria o “mapeamento” das variáveis, normalmente usando aes
(de aesthetics), ou seja, você especifica dentre várias coisas, por exemplo, quais são as variáveis que serão representadas nos eixos x e y, cores e símbolos usados para plotar os dados.
Depois da função ggplot
, nós especificamos um geom
. Por exemplo, geom_point
para plotar pontos, geom_boxplot
para um boxplot, etc. Para a lista completa de geoms e todas as outras opções do pacote, visite a página do projeto ggplot2.
Note que adicionamos um geom com um “+”. No ggplot2, nós criamos gráficos em camadas (layers), e adicionamos camada a camada com um “+”.
Com o intuito de explorarmos o pacote ggplot2, vamos voltar a trabalhar com o seguro saude.txt que contém variáveis referentes a clientes de um seguro de saúde, tais como sexo, imc, número de dependentes, fumante, região, valor das cobranças e se possuía plano de saúde anteriormente. Criem um projeto chamado ggplot2. Vale ressaltar que o arquivo possui as seguintes características:
- 99999 foi usado como código para dado faltante,
- , é o indicador de decimal.
#Ativando pacote
library(readr)
#Importando o arquivo seguro saude.txt
= read_delim(file = "seguro saude.txt", #nome do arquivo com extensão entre aspas
base_seguro na = "99999", #código usado para indicar dado faltante
locale = locale(decimal_mark = ",")) #função que controla aspectos do arquivo como o decimal
## Rows: 1338 Columns: 8
## ── Column specification ───────────────────────────────────
## Delimiter: " "
## chr (1): fumante
## dbl (7): idade, sexo, imc, num_dep, regiao, cobrancas, plano_anterior
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#Visualizando o objeto
base_seguro
## # A tibble: 1,338 × 8
## idade sexo imc num_dep fumante regiao cobrancas plano_anterior
## <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl> <dbl>
## 1 31 2 20.4 0 Não 4 3260. NA
## 2 25 2 26.2 0 <NA> 1 2721. NA
## 3 21 2 36.9 0 Não 2 1917. NA
## 4 59 1 27.7 3 Não 3 14001. NA
## 5 58 2 23.3 0 Não 4 11346. NA
## 6 32 1 23.6 1 Não 3 17626. NA
## 7 50 1 26.2 2 Não 2 10494. NA
## 8 62 1 39.2 0 Não 4 13471. NA
## 9 62 1 33.0 3 Não 2 15612. NA
## 10 39 2 24.5 2 Não 2 6710. 1
## # … with 1,328 more rows
Após a importação do arquivo, iremos transformar em fatores as variáveis qualitativas, seguindo o dicionário da base.
#Transformando a variável sexo em factor
$sexo = factor(x = base_seguro$sexo, #vetor com os valores a serem rotulados
base_segurolevels = c(1,2), #os valores distintos que aparecem
labels = c("Mulher", "Homem")) #os rótulos dos valores
#Transformando a variável fumante em factor
$fumante = factor(x = base_seguro$fumante)
base_seguro
#Transformando a variável regiao em factor
$regiao = factor(x = base_seguro$regiao,
base_segurolevels = c(1,2,3,4),
labels = c("Nordeste", "Noroeste", "Sudeste", "Sudoeste"))
#Transformando a variável plano_anterior em factor
$plano_anterior = factor(x = base_seguro$plano_anterior, #vetor com os valores a serem rotulados
base_segurolevels = c(0,1), #os valores distintos que aparecem
labels = c("Não", "Sim")) #os rótulos dos valores
#Visualizando o objeto
base_seguro
## # A tibble: 1,338 × 8
## idade sexo imc num_dep fumante regiao cobrancas plano_anterior
## <dbl> <fct> <dbl> <dbl> <fct> <fct> <dbl> <fct>
## 1 31 Homem 20.4 0 Não Sudoeste 3260. <NA>
## 2 25 Homem 26.2 0 <NA> Nordeste 2721. <NA>
## 3 21 Homem 36.9 0 Não Noroeste 1917. <NA>
## 4 59 Mulher 27.7 3 Não Sudeste 14001. <NA>
## 5 58 Homem 23.3 0 Não Sudoeste 11346. <NA>
## 6 32 Mulher 23.6 1 Não Sudeste 17626. <NA>
## 7 50 Mulher 26.2 2 Não Noroeste 10494. <NA>
## 8 62 Mulher 39.2 0 Não Sudoeste 13471. <NA>
## 9 62 Mulher 33.0 3 Não Noroeste 15612. <NA>
## 10 39 Homem 24.5 2 Não Noroeste 6710. Sim
## # … with 1,328 more rows
7.1 Gráfico de dispersão (pontos)
Vamos começar produzindo um gráfico de dispersão (também chamado de gráfico de pontos) das variáveis imc e valor da cobrança. Para elaborar este gráfico, iremos usar a função ggplot
e geom_point
(esta segunda é a responsável por fazer o gráfico de pontos, isto é, o gráfico é definido em função do geom_
que escolhemos).
#Ativando o pacote
library(ggplot2)
#Criando um gráfico de dispersão
|> #indicando o objeto que contém as variáveis
base_seguro ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas)) + #especificando a variável do eixo y
geom_point() #especificando o formato do gráfico
## Warning: Removed 3 rows containing missing values (`geom_point()`).
O gráfico resultante possui a variável imc no eixo x e cobranças no eixo y. O default do gráfico é possuir o fundo cinza e pontos da cor preta. Os rótulos dos eixos são preenchidos automaticamente com os nomes das variáveis. Entretanto, é possível alterarmos toda essa configuração básica, usando o argumento color
na função ggplot
, e as funções labs
e theme
#Criando um gráfico de dispersão
|> #indicando o objeto que contém as variáveis
base_seguro ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas)) + #especificando a variável do eixo y
geom_point(color = "red") + #especificando o formato do gráfico e a cor dos pontos
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)") + #rótulo do eixo y
theme_classic() #modificando o tema do gráfico
## Warning: Removed 3 rows containing missing values (`geom_point()`).
Percebam que o color não se encontra dentro da função aes
, isso porque a coloração dos pontos não está sendo definido por meio de uma variável e sim de uma cor específica. Qualquer definição do gráfico que dependa de uma variável, deverá ser realizada obrigatoriamente dentro da função aes
.
É possível identificar os pontos de acordo com as categorias de outras variáveis, por exemplo, abaixo indicamos os pontos de acordo com o hábito de fumar.
#Criando um gráfico de dispersão
|> #indicando o objeto que contém as variáveis
base_seguro ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas,#especificando a variável do eixo y
color = fumante)) + #especificando a cor dos pontos
geom_point() + #especificando o formato do gráfico
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)", #rótulo do eixo y
color = "Fuma?") + #rótulo da legenda criada pelo color
theme_classic() #modificando o tema do gráfico
## Warning: Removed 3 rows containing missing values (`geom_point()`).
Retirando os dados faltantes referente a variável fumante.
#Ativando o pacote
library(dplyr)
#Criando um gráfico de dispersão
|> #indicando o objeto que contém as variáveis
base_seguro filter(!is.na(fumante)) |> #filtrando somente os indivíduos com informações sobre o hábito de fumar
ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas,#especificando a variável do eixo y
color = fumante)) + #especificando a cor dos pontos
geom_point() + #especificando o formato do gráfico
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)", #rótulo do eixo y
color = "Fuma?") + #rótulo da legenda criada pelo color
theme_classic() #modificando o tema do gráfico
## Warning: Removed 3 rows containing missing values (`geom_point()`).
É possível identificar os pontos para categorias de variáveis qualitativas ou mesmo valores de variáveis quantitativas. Vejam os dois exemplos abaixo.
#Criando um gráfico de dispersão
|> #indicando o objeto que contém as variáveis
base_seguro ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas,#especificando a variável do eixo y
color = idade)) + #especificando a cor dos pontos
geom_point() + #especificando o formato do gráfico
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)", #rótulo do eixo y
color = "Idade") + #rótulo da legenda criada pelo color
theme_classic() #modificando o tema do gráfico
## Warning: Removed 3 rows containing missing values (`geom_point()`).
#Criando um gráfico de dispersão
|> #indicando o objeto que contém as variáveis
base_seguro ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas,#especificando a variável do eixo y
size = idade)) + #especificando o tamanho dos pontos
geom_point() + #especificando o formato do gráfico
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)", #rótulo do eixo y
color = "Idade") + #rótulo da legenda criada pelo color
theme_classic() #modificando o tema do gráfico
## Warning: Removed 4 rows containing missing values (`geom_point()`).
Com o pacote ggplot2 os gráficos viram objetos, isto é, podemos salvar os gráficos em objetos e posteriormente manipulá-los.
#Criando um gráfico de dispersão
= base_seguro |> #indicando o objeto que contém as variáveis
graf1 filter(fumante == "Sim") |> #filtrando somente os fumantes
ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas)) + #especificando a variável do eixo y
geom_point(color = "blue") + #especificando o formato do gráfico e a cor dos pontos
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)") + #rótulo do eixo y
theme_classic() #modificando o tema do gráfico
#Visualizando o objeto
graf1
## Warning: Removed 3 rows containing missing values (`geom_point()`).
Se durante a apresentação do gráfico, alguém perguntasse se essa relação entre IMC e valor cobrado pelo plano se mnatém, é possível manipularmos o objeto já criado.
#Fatiando o gráfico usando uma variável
+
graf1 facet_wrap(~regiao, #variável que vai ser usada para fatiar o gráfico
nrow = 3) #número de linhas do gráfico
## Warning: Removed 3 rows containing missing values (`geom_point()`).
A presença dos NA no gráfico se dá, pois não foi feito nenhuma filtragem na construção do objeto graf1. É possível retirarmos, mas precisaremos refazer o gráfico.
#Fatiando o gráfico usando uma variável
|> #indicando o objeto que contém as variáveis
base_seguro filter(fumante == "Sim", !is.na(regiao)) |> #filtrando somente indíduos que são fumantes e desconsiderando os indíviduos que não possuem informação sobre a região
ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas)) + #especificando a variável do eixo y
geom_point(color = "blue") + #especificando o formato do gráfico e a cor dos pontos
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)") + #rótulo do eixo y
theme_light() + #modificando o tema do gráfico
facet_wrap(~regiao) #variável que vai ser usada para fatiar o gráfico
## Warning: Removed 3 rows containing missing values (`geom_point()`).
Também é possível fatiar o gráfico em função de duas variáveis.
#Fatiando o gráfico usando uma variável
|> #indicando o objeto que contém as variáveis
base_seguro filter(fumante == "Sim", !is.na(regiao), !is.na(sexo)) |> #filtrando somente os fumantes
ggplot(mapping = aes(x = imc, #especificando a variável do eixo x
y = cobrancas)) + #especificando a variável do eixo y
geom_point(color = "blue") + #especificando o formato do gráfico e a cor dos pontos
labs(x = "índice de Massa Corpórea", #rótulo do eixo x
y = "Valor cobrança (em reais)") + #rótulo do eixo y
theme_minimal() + #modificando o tema do gráfico
facet_grid(sexo ~ regiao)
## Warning: Removed 3 rows containing missing values (`geom_point()`).
7.2 Boxplot
Uma visualização útil para a detecção de dados discrepantes (outliers) em variáveis quantitativas é o boxplot.
A seguir vamos criar o boxplot da variável cobranças.
#Criando um boxplot
= base_seguro |> #indicando o objeto que contém as variáveis
graf2 ggplot(mapping = aes(y = cobrancas)) + #especificando a variável do eixo y
geom_boxplot() + #especificando o formato do gráfico
labs(y = "Valor cobrança (em reais)") #rótulo do eixo y
#Visualizando o objeto
graf2
## Warning: Removed 1 rows containing non-finite values
## (`stat_boxplot()`).
É possível alterar a estética do gráfico como exemplificado abaixo.
#Criando um boxplot
= base_seguro |> #indicando o objeto que contém as variáveis
graf2 ggplot(mapping = aes(y = cobrancas)) + #especificando a variável do eixo y
geom_boxplot(fill = "green") + #especificando o formato do gráfico
labs(y = "Valor cobrança (em reais)") + #rótulo do eixo y
theme_classic() #modificando o tema do gráfico
#Visualizando o objeto
graf2
## Warning: Removed 1 rows containing non-finite values
## (`stat_boxplot()`).
Ou mesmo usar as facetas de fatiamento discutidas anteriormente.
#Visualizando o objeto
+
graf2 facet_wrap(~regiao)
## Warning: Removed 1 rows containing non-finite values
## (`stat_boxplot()`).
7.3 Histogramas
Já os histogramas são gráficos úteis para avaliar o formato da distribuição de variáveuis quantitativas.
A seguir vamos criar o boxplot da variável cobranças.
#Criando um histograma
= base_seguro |> #indicando o objeto que contém as variáveis
graf3 ggplot(mapping = aes(x = cobrancas)) + #especificando a variável do eixo x
geom_histogram() + #especificando o formato do gráfico
labs(x = "Valor cobrança (em reais)") #rótulo do eixo x
#Visualizando o objeto
graf3
## `stat_bin()` using `bins = 30`. Pick better value with
## `binwidth`.
## Warning: Removed 1 rows containing non-finite values
## (`stat_bin()`).
É possível alterar a estética do gráfico como exemplificado abaixo.
#Criando um gráfico de barras
= base_seguro |> #indicando o objeto que contém as variáveis
graf3 ggplot(mapping = aes(x = cobrancas)) + #especificando a variável do eixo x
geom_histogram(fill = "pink", #especificando a cor do gráfico
bins = 10) + #especificando o número de intervalos
labs(x = "Valor cobrança (em reais)", #rótulo do eixo x
y = "Frequência") + #rótulo do eixo y
theme_classic() #modificando o tema do gráfico
#Visualizando o objeto
graf3
## Warning: Removed 1 rows containing non-finite values
## (`stat_bin()`).
7.4 Gráfico de barras
Para construirmos um gráfico de barra, utilizaremos a função geom_bar
.
#Criando um gráfico de barras
= base_seguro |> #indicando o objeto que contém as variáveis
graf4 filter(!is.na(regiao)) |> #filtrando somente as linhas com dados de região
ggplot(mapping = aes(x = regiao)) + #especificando a variável do eixo x
geom_bar(fill = "purple") + #especificando o formato e a cor do gráfico
labs(x = "Região", #rótulo do eixo x
y = "Contagem") + #rótulo do eixo y
theme_classic() #modificando o tema do gráfico
#Visualizando o objeto
graf4
No gráfico acima indicamos no aesthetics (aes
) qual variável seria apresentada no eixo x somente. Se especificarmos o fill
com uma cor no geom_bar
, modificamos a cor do gráfico de barra.
Se o nosso desejo for criar gráficos para tabelas de contingência, podemos fazer isso usando o geom_bar
e fazendo uma pequena modificação no aes
.
#Criando um gráfico de barras empilhadas (contagem)
= base_seguro |> #indicando o objeto que contém as variáveis
graf5 filter(!is.na(regiao),!is.na(sexo)) |> #filtrando somente as linhas com dados de região e sexo
ggplot(mapping = aes(x = regiao, #especificando a variável do eixo x
fill = sexo)) + #especificando a variável que irá preencher as barras
geom_bar() + #especificando o formato do gráfico
labs(x = "Região", #rótulo do eixo x
y = "Contagem", #rótulo do eixo y
fill = "Sexo") + #rótulo da legenda
theme_classic() #modificando o tema do gráfico
#Visualizando o objeto
graf5
Para as barras serem empilhadas, basta modificarmos position
no geom_bar
.
#Criando um gráfico de barras (lado a lado)
= base_seguro |> #indicando o objeto que contém as variáveis
graf6 filter(!is.na(regiao),!is.na(sexo)) |> #filtrando somente as linhas com dados de região e sexo
ggplot(mapping = aes(x = regiao, #especificando a variável do eixo x
fill = sexo)) + #especificando a variável que irá preencher as barras
geom_bar(position = "dodge") + #especificando o formato do gráfico
labs(x = "Região", #rótulo do eixo x
y = "Contagem", #rótulo do eixo y
fill = "Sexo") + #rótulo da legenda
theme_classic() #modificando o tema do gráfico
#Visualizando o objeto
graf6
Para criarmos um gráfico de barras empilhadas com os percentuais ao invés das contagens, é preciso usar position = "fill"
.
#Criando um gráfico de barras empilhadas (porcentagem)
= base_seguro |> #indicando o objeto que contém as variáveis
graf7 filter(!is.na(regiao),!is.na(sexo)) |> #filtrando somente as linhas com dados de região e sexo
ggplot(mapping = aes(x = regiao, #especificando a variável do eixo x
fill = sexo)) + #especificando a variável que irá preencher as barras
geom_bar(position = "fill") + #especificando o formato do gráfico
labs(x = "Região", #rótulo do eixo x
y = "Porcentagem", #rótulo do eixo y
fill = "Sexo") + #rótulo da legenda
theme_classic() #modificando o tema do gráfico
#Visualizando o objeto
graf7
É possível apresentarmos vários gráficos em uma mesma figura usando o pacote patchwork. Vejamos os exemplos abaixo.
#Ativando o pacote
library(patchwork)
#Juntando os objetos
+ graf6 graf5
#Juntando os objetos
| graf6) / graf7 (graf5
7.5 Gráfico de linhas
Em diversas situações, possuímos dados observados ao longo do tempo e sua representação se dá na maioria das vezes por meio de um gráfico de linhas. Utilizaremos o geom_line
para fazer gráficos de linhas no R. Do mesmo modo que nos gráficos de dispersão, precisaremos definir o que será representado nos eixos x e y.
O gráfico abaixo representa a evolução do número de novos casos de COVID-19 na cidade do Rio de Janeiro entre as semanas epidemiológicas 200 e 250.
#Importando o arquivo seguro saude.txt
= read_csv(file = "cases-brazil-cities-time_2022.csv") base_COVID
## Rows: 2042905 Columns: 12
## ── Column specification ───────────────────────────────────
## Delimiter: ","
## chr (2): state, city
## dbl (9): epi_week, ibgeID, newDeaths, deaths, newCases, totalCases, deaths_...
## date (1): date
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#Visualizando o objeto
base_COVID
## # A tibble: 2,042,905 × 12
## epi_week date state city ibgeID newDe…¹ deaths newCa…² total…³ death…⁴
## <dbl> <date> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 152 2022-01-01 GO Abad… 5.20e6 0 44 1 2003 480.
## 2 152 2022-01-01 MG Abad… 3.10e6 0 20 0 601 285.
## 3 152 2022-01-01 GO Abad… 5.20e6 1 47 1 603 225.
## 4 152 2022-01-01 PA Abae… 1.50e6 0 226 0 9915 141.
## 5 152 2022-01-01 MG Abae… 3.10e6 0 44 0 1679 189.
## 6 152 2022-01-01 CE Abai… 2.30e6 0 17 0 641 142.
## 7 152 2022-01-01 BA Abar… 2.90e6 0 11 0 1238 53.4
## 8 152 2022-01-01 PR Abat… 4.10e6 0 21 0 1186 285.
## 9 152 2022-01-01 BA Abaí… 2.90e6 0 13 0 301 150.
## 10 152 2022-01-01 SC Abdo… 4.20e6 0 4 0 409 158.
## # … with 2,042,895 more rows, 2 more variables:
## # totalCases_per_100k_inhabitants <dbl>, deaths_by_totalCases <dbl>, and
## # abbreviated variable names ¹newDeaths, ²newCases, ³totalCases,
## # ⁴deaths_per_100k_inhabitants
#Criando um gráfico de linhas
|>
base_COVID filter(city == "Rio de Janeiro/RJ", epi_week>=200, epi_week<=250) |> #filtrando dados da cidade do Rio de Janeiro, entre as semanas epidemiológicas 200 e 250
group_by(epi_week) |> #agrupando os dados por semana
summarise(total_mortes = sum(newDeaths, na.rm = TRUE)) |> #calculando o total de novos casos por semana
ggplot(mapping = aes(x = epi_week, #definindo a variável a ser representada no eixo x
y = total_mortes)) + #definindo a variável a ser representada no eixo y
geom_line() + #definindo o formato do gráfico
theme_classic() + #modificando o tema do gráfico
labs(x = "Semana epidemiológica", #modificando o rótulo do eixo x
y = "Número de mortes") #modificando o rótulo do eixo y
É possível indicarmos os números de mortes em cada semana, basta usarmos o geom_label
.
#Criando um gráfico de linhas
|>
base_COVID filter(city == "Rio de Janeiro/RJ", epi_week>=200, epi_week<=250) |> #filtrando dados da cidade do Rio de Janeiro, entre as semanas epidemiológicas 200 e 250
group_by(epi_week) |> #agrupando os dados por semana
summarise(total_mortes = sum(newDeaths, na.rm = TRUE)) |> #calculando o total de novos casos por semana
ggplot(mapping = aes(x = epi_week, #definindo a variável a ser representada no eixo x
y = total_mortes)) + #definindo a variável a ser representada no eixo y
geom_line() + #definindo o formato do gráfico
geom_label(mapping = aes(label = total_mortes)) + #acrescentando a quantidade de mortes como rótulo
theme_classic() + #modificando o tema do gráfico
labs(x = "Semana epidemiológica", #modificando o rótulo do eixo x
y = "Número de mortes") #modificando o rótulo do eixo y
7.6 Escalas
O pacote ggplot2 possui uma família de funções scale_
. Estas funções servem para modificarmos escalas dos eixos dos gráficos ou mesmo escala de cores. A seguir apresentamos as principais.
Por exemplo, o graf7 possui o eixo y variando de 0 a 1, para que o mesmo seja apresentado em %, utilizaremos a função scale_y_continuous
do ggplot2. Entretanto, também usaremos a função percent_format
do pacote scales.
#Ativando o pacote
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:readr':
##
## col_factor
#Modificando a escala do eixo y
+
graf7 scale_y_continuous(labels = percent_format()) #colocando o eixo y em formato %
Ainda na função scale_y_continuous
e scale_x_continuous
, por meio do argumento breaks
, é possível indicar quais os valores serão apresentados em cada eixo. Já a função coord_cartesian
, usando o argumento, ylim
nos permite especificar onde começa e onde termina o eixo y.
#Criando um gráfico de linhas
|>
base_COVID filter(city == "Rio de Janeiro/RJ", epi_week>=200, epi_week<=250) |> #filtrando dados da cidade do Rio de Janeiro, entre as semanas epidemiológicas 200 e 250
group_by(epi_week) |> #agrupando os dados por semana
summarise(total_mortes = sum(newDeaths, na.rm = TRUE)) |> #calculando o total de novos casos por semana
ggplot(mapping = aes(x = epi_week, #definindo a variável a ser representada no eixo x
y = total_mortes)) + #definindo a variável a ser representada no eixo y
geom_line() + #definindo o formato do gráfico
geom_label(mapping = aes(label = total_mortes)) + #acrescentando a quantidade de mortes como rótulo
theme_classic() + #modificando o tema do gráfico
labs(x = "Semana epidemiológica", #modificando o rótulo do eixo x
y = "Número de mortes") + #modificando o rótulo do eixo y
scale_y_continuous(breaks = c(-20,0,50,100,150,200,250,300,350)) + #modificando a escala de valores a serem apresentados no eixo y
scale_x_continuous(breaks = seq(200, 250, 5)) + #modificando a escala de valores a serem apresentados no eixo x
coord_cartesian(ylim = c(-50, 400)) #definindo o eixo y
Para modificarmos as cores, podemos recorrer a função scale_fill_manual
.
#Criando um gráfico de barras (lado a lado)
= base_seguro |> #indicando o objeto que contém as variáveis
graf6 filter(!is.na(regiao),!is.na(sexo)) |> #filtrando somente as linhas com dados de região e sexo
ggplot(mapping = aes(x = regiao, #especificando a variável do eixo x
fill = sexo)) + #especificando a variável que irá preencher as barras
geom_bar(position = "dodge") + #especificando o formato do gráfico
labs(x = "Região", #rótulo do eixo x
y = "Contagem", #rótulo do eixo y
fill = "Sexo") + #rótulo da legenda
theme_classic() + #modificando o tema do gráfico
scale_fill_manual(values = c("#ff4500", "#268b07"))
#Visualizando o objeto
graf6
Se desejamos modificar o rótulo das categorias de uma legenda de cores, basta utilizarmos a função scale_color_discrete
.
#Criando um gráfico de linhas
|>
base_COVID filter(city %in% c("Rio de Janeiro/RJ","Belo Horizonte/MG"), epi_week>=200, epi_week<=250) |> #filtrando dados da cidade do Rio de Janeiro, entre as semanas epidemiológicas 200 e 250
group_by(epi_week, city) |> #agrupando os dados por semana
summarise(total_mortes = sum(newDeaths, na.rm = TRUE)) |> #calculando o total de novos casos por semana
ggplot(mapping = aes(x = epi_week, #definindo a variável a ser representada no eixo x
y = total_mortes, #definindo a variável a ser representada no eixo y
color = city)) + #definindo a variável que vai criar as diversas linhas
geom_line() + #definindo o formato do gráfico
theme_classic() + #modificando o tema do gráfico
labs(x = "Semana epidemiológica", #modificando o rótulo do eixo x
y = "Número de mortes", #modificando o rótulo do eixo y
color = "Cidade") + #modificando o rótulo da legenda
scale_color_discrete(labels = c("BH", "RJ"))
## `summarise()` has grouped output by 'epi_week'. You can
## override using the `.groups` argument.
7.7 Desafio
Nos desafios abaixo, serão utilizadas as mesmas bases de dados com as quais trabalhamos ao longo deste capítulo.
Crie um boxplot para variável idade, um gráfico de barras para sexo e um histograma para IMC. Apresente os gráficos de forma conjunta, de modo que na primeira linha apareçam o gráfico de barras, seguido do boxplot e na linha abaixo apareça o histograma.
Crie um gráfico para ajudar a entender se a distribuição de fumantes nas regiões são semelhantes ou não.
Crie um gráfico de linhas contendo linhas do número de novos casos por semana epidemiológica para as UFs da região Nordeste a partir da semana epidemiológica 200.
Crie um gráfico de linhas contendo linhas do número de novos óbitos por semana epidemiológica para as cidades: Niterói/RJ, São Gonçalo/RJ, Rio de Janeiro/RJ, Nova Iguaçu/RJ e Duque de Caxias/RJ. Considere dados a partir da semana epidemiológica 230. Desejamos que o nome da cidade na legenda apareça sem o /RJ.
Apresente os gráficos obtidos nos itens 3 e 4 numa mesma figura.
Apresente o histograma do IMC por região.