Como criar um gráfico lollipop em r
Semelhante a um gráfico de barras, um gráfico pirulito é útil para comparar valores quantitativos de uma variável categórica. Em vez de usar barras, um gráfico pirulito usa linhas com círculos no final para representar valores quantitativos.
Um gráfico de pirulito é uma ótima maneira de comparar várias categorias, minimizando a quantidade de cores no gráfico e concentrando a atenção do leitor nos valores reais do gráfico, em oposição às linhas ou outros gráficos do gráfico. Muitas pessoas também consideram a placa de pirulito esteticamente agradável.
Neste tutorial, seguiremos as etapas necessárias para criar o seguinte gráfico de pirulito:
Exemplo: gráfico Lollipop em R
Para este exemplo, usaremos o conjunto de dados R integrado mtcars :
#view first six rows of mtcars
head(mtcars)
Um gráfico básico de pirulito
O código a seguir ilustra como para criar um gráfico pirulito para comparar o mpg (milhas por galão) de cada um dos 32 carros no conjunto de dados.
Os nomes dos carros são definidos nos nomes das linhas do conjunto de dados, portanto, primeiro criamos uma nova coluna no conjunto de dados que contém esses nomes de linhas.
A seguir, carregamos a biblioteca ggplot2 , que usaremos para criar o gráfico pirulito.
Com ggplot2, usamos geom_segment para criar as linhas no gráfico. Definimos os valores inicial e final de x como 0 e mpg , respectivamente. Definimos os valores inicial e final de y como char :
#create new column for car names mtcars$car <- row.names(mtcars) #load ggplot2 library library(ggplot2) #create lollipop chart ggplot(mtcars, aes(x = mpg, y = car)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point()
Adicionando rótulos
Também podemos adicionar rótulos ao gráfico usando os argumentos label e geom_text :
ggplot(mtcars, aes(x = mpg, y = car, label = mpg )) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point() + geom_text(nudge_x = 1.5)
Ou, em vez de colocar os rótulos no final de cada linha, poderíamos colocá-los dentro dos próprios círculos, aumentando os círculos e alterando a cor da fonte do rótulo para branco:
ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point( size = 7 ) + geom_text( color = 'white', size = 2 )
Compare os valores com uma média
Também podemos usar um gráfico de pirulito para comparar valores com um número específico. Por exemplo, podemos encontrar o valor médio de mpg no conjunto de dados e então comparar o mpg de cada carro com a média.
O código a seguir usa a biblioteca dplyr para encontrar o valor médio de mpg e, em seguida, organizar os carros em ordem crescente de mpg :
#load library dplyr library(dplyr) #find mean value of mpg and arrange cars in order by mpg descending mtcars_new <- mtcars %>% arrange(mpg) %>% mutate(mean_mpg = mean(mpg), flag = ifelse(mpg - mean_mpg > 0, TRUE, FALSE), car = factor(car, levels = .$car)) #view first six rows of mtcars_new head(mtcars_new)
Em seguida, o código a seguir cria o gráfico de pirulito definindo a cor do círculo como igual ao valor da bandeira (neste caso TRUE ou FALSE) e o valor inicial de x para cada carro como igual ao valor médio de mpg .
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag )) + geom_segment(aes( x = mean_mpg , y = car, xend = mpg, yend = car)) + geom_point()
Usando esse tipo de paleta de cores, podemos determinar facilmente quais carros têm mpg menor e maior do que a média do conjunto de dados.
Por padrão, R usa azul e vermelho como cores do gráfico. No entanto, podemos usar qualquer cor que quisermos usando o argumento scale_color_manual :
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
geom_point() +
scale_color_manual(values = c("purple", "blue"))
Alterar a estética do gráfico
Finalmente, podemos usar os amplos recursos do ggplot2 para modificar ainda mais a estética do gráfico e criar um produto final com aparência profissional:
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) + geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car), color = "grey") + geom_point() + annotate("text", x = 27, y = 20, label = "Above Average", color = "#00BFC4", size = 3, hjust = -0.1, vjust = .75) + annotate("text", x = 27, y = 17, label = "Below Average", color = "#F8766D", size = 3, hjust = -0.1, vjust = -.1) + geom_segment(aes(x = 26.5, xend = 26.5, y = 19, yend = 23), arrow = arrow(length = unit(0.2,"cm")), color = "#00BFC4") + geom_segment(aes(x = 26.5, xend = 26.5, y = 18, yend = 14), arrow = arrow(length = unit(0.2,"cm")), color = "#F8766D") + labs(title = "Miles per Gallon by Car") + theme_minimal() + theme(axis.title = element_blank(), panel.grid.minor = element_blank(), legend.position = "none", text = element_text(family = "Georgia"), axis.text.y = element_text(size = 8), plot.title = element_text(size = 20, margin = margin(b = 10), hjust = 0), plot.subtitle = element_text(size = 12, color = "darkslategrey", margin = margin(b = 25, l = -25)), plot.caption = element_text(size = 8, margin = margin(t = 10), color = "grey70", hjust = 0))