Hoe u een lollygrafiek maakt in r
Net als een staafdiagram is een lollydiagram handig voor het vergelijken van kwantitatieve waarden van een categorische variabele. In plaats van staven te gebruiken, gebruikt een lollydiagram lijnen met cirkels aan het einde om kwantitatieve waarden weer te geven.
Een lollydiagram is een geweldige manier om meerdere categorieën te vergelijken, terwijl de hoeveelheid kleur op het diagram wordt geminimaliseerd en de aandacht van de lezer wordt gevestigd op de werkelijke waarden op het diagram, in plaats van op de lijnen of andere afbeeldingen op het diagram. Veel mensen vinden het lollybord ook esthetisch aantrekkelijk.
In deze zelfstudie doorlopen we de stappen die nodig zijn om het volgende lollydiagram te maken:
Voorbeeld: Lollipopdiagram in R
Voor dit voorbeeld gebruiken we de ingebouwde R-dataset van mtcars :
#view first six rows of mtcars
head(mtcars)
Een basislollygrafiek
De volgende code illustreert hoe om een lollygrafiek te maken om de mpg (mijl per gallon) van elk van de 32 auto’s in de dataset te vergelijken.
De autonamen worden gedefinieerd in de rijnamen van de dataset, dus we maken eerst een nieuwe kolom in de dataset die deze rijnamen bevat.
Vervolgens laden we de ggplot2- bibliotheek, die we zullen gebruiken om het lollydiagram te maken.
Met ggplot2 gebruiken we geom_segment om de lijnen op de plot te maken. We stellen de begin- en eindx-waarden in als respectievelijk 0 en mpg . We stellen de begin- en eind-y-waarden in als 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()
Etiketten toevoegen
We kunnen ook labels aan het diagram toevoegen met behulp van de argumenten label en 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)
Of in plaats van de labels aan het einde van elke regel te plaatsen, kunnen we ze binnen de cirkels zelf plaatsen door de cirkels groter te maken en de tekstkleur van het label te veranderen in wit:
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 )
Vergelijk waarden met een gemiddelde
We kunnen ook een lollydiagram gebruiken om waarden met een specifiek getal te vergelijken. We kunnen bijvoorbeeld de gemiddelde mpg- waarde in de dataset vinden en vervolgens de mpg van elke auto vergelijken met het gemiddelde.
De volgende code gebruikt de dplyr- bibliotheek om de gemiddelde mpg- waarde te vinden en vervolgens de auto’s in oplopende volgorde van mpg te rangschikken:
#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)
Vervolgens maakt de volgende code het lollydiagram door de kleur van de cirkel gelijk te stellen aan de vlagwaarde (in dit geval WAAR of ONWAAR) en de start-x-waarde voor elke auto gelijk te stellen aan de gemiddelde mpg- waarde.
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag )) + geom_segment(aes( x = mean_mpg , y = car, xend = mpg, yend = car)) + geom_point()
Met behulp van dit type kleurenpalet kunnen we eenvoudig bepalen welke auto’s een lager en hoger mpg hebben dan het datasetgemiddelde.
Standaard gebruikt R blauw en rood als diagramkleuren. We kunnen echter elke gewenste kleur gebruiken met behulp van het scale_color_manual argument:
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"))
Verander de esthetiek van diagrammen
Ten slotte kunnen we de brede mogelijkheden van ggplot2 gebruiken om de esthetiek van de grafiek verder aan te passen en een professioneel ogend eindproduct te creëren:
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))