Come creare un grafico lollipop in r
Simile a un grafico a barre, un grafico lecca-lecca è utile per confrontare i valori quantitativi di una variabile categoriale. Invece di utilizzare le barre, un grafico lecca-lecca utilizza linee con cerchi alla fine per rappresentare valori quantitativi.
Un grafico lecca-lecca è un ottimo modo per confrontare più categorie riducendo al minimo la quantità di colore sul grafico e concentrando l’attenzione del lettore sui valori effettivi sul grafico anziché sulle linee o altri elementi grafici sul grafico. Molte persone considerano anche il tagliere per lecca-lecca esteticamente gradevole.
In questo tutorial, eseguiremo i passaggi necessari per creare il seguente grafico lecca-lecca:
Esempio: grafico Lollipop in R
Per questo esempio, utilizzeremo il set di dati R integrato di mtcars :
#view first six rows of mtcars
head(mtcars)
Una tabella lecca-lecca di base
Il codice seguente illustra come per creare un grafico lecca-lecca per confrontare i mpg (miglia per gallone) di ciascuna delle 32 auto nel set di dati.
I nomi delle auto sono definiti nei nomi delle righe del set di dati, quindi creiamo prima una nuova colonna nel set di dati che contiene questi nomi di righe.
Successivamente, carichiamo la libreria ggplot2 , che utilizzeremo per creare il grafico lollipop.
Con ggplot2 utilizziamo geom_segment per creare le linee sulla trama. Impostiamo i valori x iniziale e finale rispettivamente come 0 e mpg . Impostiamo i valori y iniziale e finale come 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()
Aggiunta di etichette
Possiamo anche aggiungere etichette al grafico utilizzando gli argomenti 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)
Oppure invece di posizionare le etichette alla fine di ogni riga, potremmo posizionarle all’interno dei cerchi stessi ingrandendo i cerchi e cambiando il colore del carattere dell’etichetta in bianco:
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 )
Confronta i valori con una media
Possiamo anche utilizzare un grafico lecca-lecca per confrontare i valori con un numero specifico. Ad esempio, possiamo trovare il valore medio di mpg nel set di dati e quindi confrontare il valore mpg di ciascuna auto con la media.
Il codice seguente utilizza la libreria dplyr per trovare il valore medio di mpg e quindi disporre le auto in ordine crescente di 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)
Quindi il codice seguente crea il grafico lecca-lecca impostando il colore del cerchio in modo che sia uguale al valore del flag (in questo caso TRUE o FALSE) e il valore x iniziale per ciascuna auto sia uguale al valore medio 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()
Utilizzando questo tipo di tavolozza di colori, possiamo facilmente determinare quali auto hanno un mpg inferiore e superiore rispetto alla media del set di dati.
Per impostazione predefinita, R utilizza il blu e il rosso come colori del grafico. Tuttavia, possiamo utilizzare tutti i colori che desideriamo utilizzando l’argomento 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"))
Cambia l’estetica del grafico
Infine, possiamo utilizzare le ampie funzionalità di ggplot2 per modificare ulteriormente l’estetica del grafico e creare un prodotto finale dall’aspetto professionale:
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))