R Language
ggplot2
Zoeken…
Opmerkingen
ggplot2
heeft zijn eigen perfecte referentiewebsite http://ggplot2.tidyverse.org/ .
Meestal is het handiger om de structuur of inhoud van de geplotte gegevens (bijv. Een data.frame
) aan te passen dan dingen in de plot achteraf aan te passen.
RStudio publiceert een zeer nuttig cheatsheet "Datavisualisatie met ggplot2" dat hier te vinden is .
Scatterplots
We plotten een eenvoudig spreidingsdiagram met de ingebouwde irisgegevensset als volgt:
library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) +
geom_point()
Meerdere plots weergeven
Geef meerdere plots weer in één afbeelding met de verschillende facet
. Een voordeel van deze methode is dat alle assen dezelfde schaal in diagrammen delen, waardoor u ze gemakkelijk in één oogopslag kunt vergelijken. We gebruiken de mpg
gegevensset in ggplot2
.
Grafieken regel voor regel omwikkelen (probeert een vierkante lay-out te maken):
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_wrap(~class)
Toon meerdere grafieken op één rij, meerdere kolommen:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(.~class)
Toon meerdere grafieken op één kolom, meerdere rijen:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(class~.)
Toon meerdere grafieken in een raster met 2 variabelen:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(trans~class) #"row" parameter, then "column" parameter
Bereid uw gegevens voor op het plotten
ggplot2
werkt het beste met een lang dataframe. De volgende voorbeeldgegevens die de prijzen voor snoep op 20 verschillende dagen vertegenwoordigen, in een formaat dat als breed wordt beschreven, omdat elke categorie een kolom heeft.
set.seed(47)
sweetsWide <- data.frame(date = 1:20,
chocolate = runif(20, min = 2, max = 4),
iceCream = runif(20, min = 0.5, max = 1),
candy = runif(20, min = 1, max = 3))
head(sweetsWide)
## date chocolate iceCream candy
## 1 1 3.953924 0.5890727 1.117311
## 2 2 2.747832 0.7783982 1.740851
## 3 3 3.523004 0.7578975 2.196754
## 4 4 3.644983 0.5667152 2.875028
## 5 5 3.147089 0.8446417 1.733543
## 6 6 3.382825 0.6900125 1.405674
Om sweetsWide
te converteren naar lang formaat voor gebruik met ggplot2
, kunnen verschillende handige functies van base R en de pakketten reshape2
, data.table
en tidyr
(in chronologische volgorde) worden gebruikt:
# reshape from base R
sweetsLong <- reshape(sweetsWide, idvar = 'date', direction = 'long',
varying = list(2:4), new.row.names = NULL, times = names(sweetsWide)[-1])
# melt from 'reshape2'
library(reshape2)
sweetsLong <- melt(sweetsWide, id.vars = 'date')
# melt from 'data.table'
# which is an optimized & extended version of 'melt' from 'reshape2'
library(data.table)
sweetsLong <- melt(setDT(sweetsWide), id.vars = 'date')
# gather from 'tidyr'
library(tidyr)
sweetsLong <- gather(sweetsWide, sweet, price, chocolate:candy)
Het geeft allemaal een vergelijkbaar resultaat:
head(sweetsLong)
## date sweet price
## 1 1 chocolate 3.953924
## 2 2 chocolate 2.747832
## 3 3 chocolate 3.523004
## 4 4 chocolate 3.644983
## 5 5 chocolate 3.147089
## 6 6 chocolate 3.382825
Zie ook Gegevens omvormen tussen lange en brede formulieren voor meer informatie over het converteren van gegevens tussen lange en brede formaten.
De resulterende sweetsLong
heeft een kolom met prijzen en een kolom met het type snoep. Nu is plotten veel eenvoudiger:
library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()
Voeg horizontale en verticale lijnen toe om te plotten
Voeg een gemeenschappelijke horizontale lijn toe voor alle categorische variabelen
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_hline(aes(yintercept=5), colour="#990000", linetype="dashed")
Voeg een horizontale lijn toe voor elke categorische variabele
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
# add horizontal levels for drawing lines
df$hval <- df$y + 2
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval), colour="#990000", width=0.75)
Voeg een horizontale lijn toe over gegroepeerde staven
# sample data
df <- data.frame(x = rep(c('A', 'B'), times=2),
group = rep(c('G1', 'G2'), each=2),
y = c(3, 4, 5, 6),
hval = c(5, 6, 7, 8))
p1 <- ggplot(df, aes(x=x, y=y, fill=group))
+ geom_bar(position="dodge", stat="identity")
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval),
colour="#990000",
position = "dodge",
linetype = "dashed")
Verticale lijn toevoegen
# sample data
df <- data.frame(group=rep(c('A', 'B'), each=20),
x = rnorm(40, 5, 2),
y = rnorm(40, 10, 2))
p1 <- ggplot(df, aes(x=x, y=y, colour=group)) + geom_point()
p1 + geom_vline(aes(xintercept=5), color="#990000", linetype="dashed")
Verticaal en horizontaal staafdiagram
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")
het is mogelijk om een horizontaal staafdiagram te verkrijgen door simpelweg coordin_flip () esthetiek toe te voegen aan het ggplot-object:
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")+
coord_flip()
Viool plot
Vioolplots zijn kerneldichtheidsschattingen gespiegeld in het verticale vlak. Ze kunnen worden gebruikt om verschillende distributies naast elkaar te visualiseren, waarbij de spiegeling helpt om verschillen te benadrukken.
ggplot(diamonds, aes(cut, price)) +
geom_violin()
Vioolplots zijn genoemd naar hun gelijkenis met het muziekinstrument, dit is vooral zichtbaar wanneer ze worden gekoppeld aan een overlay boxplot. Deze visualisatie beschrijft vervolgens de onderliggende verdelingen, zowel in termen van Tukey's 5-cijferige samenvatting (als boxplots) en volledige continue dichtheidsschattingen (violen).
ggplot(diamonds, aes(cut, price)) +
geom_violin() +
geom_boxplot(width = .1, fill = "black", outlier.shape = NA) +
stat_summary(fun.y = "median", geom = "point", col = "white")
Produceer basisplots met qplot
qplot is vergelijkbaar met base r plot()
, en probeert altijd uw gegevens te plotten zonder al te veel specificaties te vereisen.
basis qplot
qplot(x = disp, y = mpg, data = mtcars)
kleuren toevoegen
qplot(x = disp, y = mpg, colour = cyl,data = mtcars)
vloeiender toevoegen
qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)