Como criar um gráfico de Histograma no R usando o pacote ggplot2
A visualização de dados é uma ferramenta essencial na análise e interpretação de conjuntos de dados complexos. No ecossistema da linguagem de programação R, o pacote ggplot2, desenvolvido por Hadley Wickham, autor de “R para Data Science”, é uma das ferramentas mais poderosas e flexíveis para a criação de gráficos estatísticos.
Neste artigo, exploraremos os fundamentos do ggplot2 e como ele pode ser usado para criar gráficos de histograma destinados à análise de uma variável numérica.
Instalando o pacote ggplot2
Para instalar o pacote ggplot2, primeiro precisamos usar a função install.packages() e, após, carregamos o pacote com a função library() .
O código ficará assim:
install.packages("ggplot2")
library(ggplot2)
Carregando os dados
Os dados que vou utilizar como exemplo são parte do pacote datasets, chamado students, e mostram o efeito de dois soporíferos (“remédios do sono”) em 10 pacientes.
Para isso, precisamos instalar e carregar o pacote datasets com o mesmo método explicado anteriormente:
install.packages("datasets")
library(datasets)
Vou atribuir os dados a uma variável chamada df, pois iremos utilizá-la na contrução dos gráficos:
df <- sleep
df
Construindo o Histograma
Como vamos criar um histograma, precisamos informar apenas o nome da variável do eixo x. No caso, é a coluna “extra”, pois é a única coluna que contém uma variável numérica.
No código a seguir, usamos a função ggplot() para informar a origem dos dados (argumento “data”) e a coluna que será plotada no eixo x da estética (função aes()
):
ggplot(data = df, aes(x = extra))
O resultado será a imagem abaixo:
Adicionamos a geometria do histograma (geom_histogram()
) e escolhemos a largura do bin (argumento “binwidth”):
ggplot(data = df, aes(x = extra)) +
geom_histogram(binwidth = 1)
Resultado:
Para adicionar um título e alterar o label dos eixos x,y, é só adicionar a função labs()
e seus respectivos argumentos:
ggplot(data = df, aes(x = extra)) +
geom_histogram(binwidth = 1) +
labs(
title = "Histograma da quantidade de estudantes por aumento nas horas de sono",
subtitle = "Student's Sleep Data",
x = "Aumento nas horas de sono",
y = "Quantidade de Estudantes"
)
Resultado:
Para colocar os valores das distribuições no histograma, usamos a função stat_bin()
e seus argumentos:
ggplot(data = df, aes(x = extra)) +
geom_histogram(binwidth = 1) +
stat_bin(
binwidth = 1,
geom = "text",
aes(label = after_stat(count)),
vjust = -1
) +
labs(
title = "Histograma da quantidade de estudantes por aumento nas horas de sono",
subtitle = "Student's Sleep Data",
x = "Aumento nas horas de sono",
y = "Quantidade de Estudantes"
)
Resultado:
Nessa análise, vou plotar uma linha que indica a média dessa distribuição. Para isso, utilizo a função geom_vline()
, pois ela gera uma linha vertical que intercepta o eixo x:
media_extra <- mean(df$extra)
ggplot(data = sleep, aes(x = extra)) +
geom_histogram(binwidth = 1) +
stat_bin(
binwidth = 1,
geom = "text",
aes(label = after_stat(count)),
vjust = -1
) +
geom_vline(xintercept = media_extra, color ="red", linetype = "dashed") +
labs(
title = "Histograma da quantidade de estudantes por aumento nas horas de sono",
subtitle = "Student's Sleep Data",
x = "Aumento nas horas de sono",
y = "Quantidade de Estudantes"
)
Resultado:
Pronto! O seu histograma já está finalizado. Mas, caso você queira alterar as cores e a transparência, é preciso adicionar os seguintes argumentos na função geom_histogram()
:
- color — altera a cor do contorno das barras e aceita RGB ou o nome da cor em inglês;
- fill — altera a cor de preenchimento das barras e aceita RGB ou o nome da cor em inglês;
- alpha — número de 0 a 1 que altera a transparência do histograma
Alterando a transparência:
ggplot(data = sleep, aes(x = extra)) +
geom_histogram(binwidth = 1, alpha = 0.5) +
stat_bin(
binwidth = 1,
geom = "text",
aes(label = after_stat(count)),
vjust = -1
) +
geom_vline(xintercept = media_extra, color ="red", linetype = "dashed") +
labs(
title = "Histograma da quantidade de estudantes por aumento nas horas de sono",
subtitle = "Student's Sleep Data",
x = "Aumento nas horas de sono",
y = "Quantidade de Estudantes"
)
Alterando as cores:
ggplot(data = sleep, aes(x = extra)) +
geom_histogram(binwidth = 1, fill = "white", color = "#113D63") +
stat_bin(
binwidth = 1,
geom = "text",
aes(label = after_stat(count)),
vjust = -1
) +
geom_vline(xintercept = media_extra, color ="red", linetype = "dashed") +
labs(
title = "Histograma da quantidade de estudantes por aumento nas horas de sono",
subtitle = "Student's Sleep Data",
x = "Aumento nas horas de sono",
y = "Quantidade de Estudantes"
)
Por fim, ainda é possível alterar o tema das bordas e do fundo do gráfico com as funções theme()
. Você pode ler mais sobre elas e ver quais são as opções disponíveis nesse link: https://ggplot2.tidyverse.org/reference/ggtheme.html