I ggplot2 oprettes en graf ved at deklarere geoms, som er den engelske forkortelse for geometriske objekter. Geoms deklareres sekventielt; en graf kan således indeholde mange geoms, der visualiserer data. Hver geom har mere eller mindre intuitive navne. Funktionen geom_bar() laver søjlediagrammer; geom_line() laver linjer; geom_hline() laver vandrette linjer; geom_boxplot() laver boxplots osv. Listen nedenfor viser de mest almindelige geometriske objekter med links til dokumentationen. Funktionernes navne angiver, hvad de visualiserer.
[geom_abline()](https://ggplot2.tidyverse.org/reference/geom_abline.html) [geom_hline()](https://ggplot2.tidyverse.org/reference/geom_abline.html) [geom_vline()](https://ggplot2.tidyverse.org/reference/geom_abline.html) [geom_bar()](https://ggplot2.tidyverse.org/reference/geom_bar.html) [geom_col()](https://ggplot2.tidyverse.org/reference/geom_bar.html) [stat_count()](https://ggplot2.tidyverse.org/reference/geom_bar.html) [geom_bin_2d()](https://ggplot2.tidyverse.org/reference/geom_bin_2d.html) [stat_bin_2d()](https://ggplot2.tidyverse.org/reference/geom_bin_2d.html) [geom_blank()](https://ggplot2.tidyverse.org/reference/geom_blank.html) [geom_boxplot()](https://ggplot2.tidyverse.org/reference/geom_boxplot.html) [stat_boxplot()](https://ggplot2.tidyverse.org/reference/geom_boxplot.html) [geom_contour()](https://ggplot2.tidyverse.org/reference/geom_contour.html) [geom_abline()](https://ggplot2.tidyverse.org/reference/geom_abline.html) [geom_hline()](https://ggplot2.tidyverse.org/reference/geom_abline.html) [geom_vline()](https://ggplot2.tidyverse.org/reference/geom_abline.html) [geom_bar()](https://ggplot2.tidyverse.org/reference/geom_bar.html) [geom_col()](https://ggplot2.tidyverse.org/reference/geom_bar.html) [stat_count()](https://ggplot2.tidyverse.org/reference/geom_bar.html) [geom_bin_2d()](https://ggplot2.tidyverse.org/reference/geom_bin_2d.html) [stat_bin_2d()](https://ggplot2.tidyverse.org/reference/geom_bin_2d.html) [geom_blank()](https://ggplot2.tidyverse.org/reference/geom_blank.html) [geom_boxplot()](https://ggplot2.tidyverse.org/reference/geom_boxplot.html) [stat_boxplot()](https://ggplot2.tidyverse.org/reference/geom_boxplot.html) [geom_contour()](https://ggplot2.tidyverse.org/reference/geom_contour.html) [geom_contour_filled()](https://ggplot2.tidyverse.org/reference/geom_contour.html) [stat_contour()](https://ggplot2.tidyverse.org/reference/geom_contour.html) |
stat_contour_filled() [geom_count()](https://ggplot2.tidyverse.org/reference/geom_count.html) [stat_sum()](https://ggplot2.tidyverse.org/reference/geom_count.html) [geom_density()](https://ggplot2.tidyverse.org/reference/geom_density.html) [stat_density()](https://ggplot2.tidyverse.org/reference/geom_density.html) [geom_density_2d()](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) [geom_density_2d_filled()](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) [stat_density_2d()](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) [stat_density_2d_filled()](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) [geom_dotplot()](https://ggplot2.tidyverse.org/reference/geom_dotplot.html) [geom_errorbarh()](https://ggplot2.tidyverse.org/reference/geom_errorbarh.html) [geom_function()](https://ggplot2.tidyverse.org/reference/geom_function.html) [stat_function()](https://ggplot2.tidyverse.org/reference/geom_function.html) [geom_hex()](https://ggplot2.tidyverse.org/reference/geom_hex.html) [stat_bin_hex()](https://ggplot2.tidyverse.org/reference/geom_hex.html) [geom_freqpoly()](https://ggplot2.tidyverse.org/reference/geom_histogram.html) [geom_histogram()](https://ggplot2.tidyverse.org/reference/geom_histogram.html) [stat_bin()](https://ggplot2.tidyverse.org/reference/geom_histogram.html) [geom_jitter()](https://ggplot2.tidyverse.org/reference/geom_jitter.html) [geom_crossbar()](https://ggplot2.tidyverse.org/reference/geom_linerange.html) [geom_errorbar()](https://ggplot2.tidyverse.org/reference/geom_linerange.html) [geom_linerange()](https://ggplot2.tidyverse.org/reference/geom_linerange.html) [geom_pointrange()](https://ggplot2.tidyverse.org/reference/geom_linerange.html) [geom_map()](https://ggplot2.tidyverse.org/reference/geom_map.html) [geom_path()](https://ggplot2.tidyverse.org/reference/geom_path.html) [geom_line()](https://ggplot2.tidyverse.org/reference/geom_path.html) |
geom_step() geom_point() [geom_polygon()](https://ggplot2.tidyverse.org/reference/geom_polygon.html) [geom_qq_line()](https://ggplot2.tidyverse.org/reference/geom_qq.html) [stat_qq_line()](https://ggplot2.tidyverse.org/reference/geom_qq.html) [geom_qq()](https://ggplot2.tidyverse.org/reference/geom_qq.html) [stat_qq()](https://ggplot2.tidyverse.org/reference/geom_qq.html) [geom_quantile()](https://ggplot2.tidyverse.org/reference/geom_quantile.html) [stat_quantile()](https://ggplot2.tidyverse.org/reference/geom_quantile.html) [geom_ribbon()](https://ggplot2.tidyverse.org/reference/geom_ribbon.html) [geom_area()](https://ggplot2.tidyverse.org/reference/geom_ribbon.html) [stat_align()](https://ggplot2.tidyverse.org/reference/geom_ribbon.html) [geom_rug()](https://ggplot2.tidyverse.org/reference/geom_rug.html) [geom_segment()](https://ggplot2.tidyverse.org/reference/geom_segment.html) [geom_curve()](https://ggplot2.tidyverse.org/reference/geom_segment.html) [geom_smooth()](https://ggplot2.tidyverse.org/reference/geom_smooth.html) [stat_smooth()](https://ggplot2.tidyverse.org/reference/geom_smooth.html) [geom_spoke()](https://ggplot2.tidyverse.org/reference/geom_spoke.html) [geom_label()](https://ggplot2.tidyverse.org/reference/geom_text.html) [geom_text()](https://ggplot2.tidyverse.org/reference/geom_text.html) [geom_raster()](https://ggplot2.tidyverse.org/reference/geom_tile.html) [geom_rect()](https://ggplot2.tidyverse.org/reference/geom_tile.html) [geom_tile()](https://ggplot2.tidyverse.org/reference/geom_tile.html) [geom_violin()](https://ggplot2.tidyverse.org/reference/geom_violin.html) [stat_ydensity()](https://ggplot2.tidyverse.org/reference/geom_violin.html) |
|---|
Æstetisk mapping af geometriske objekter
Et geometrisk objekt skal vide, hvad der skal visualiseres. Dette gøres gennem æstetisk mapping, hvor eksempelvis data for x-akse, y-akse osv. specificeres. Æstetisk mapping defineres med funktionen aes(). En geom kan arve den æstetiske mapping fra hovedkaldet i ggplot() eller ved at deklarere den i det geometriske objekt. Princippet er, at en geom altid arver aes() fra ggplot(), medmindre andet er specificeret i geom. Nedenfor laves to identiske grafer ved at specificere aes() i henholdsvis ggplot() og geom_point(), som laver et punktdiagram (eng. scatter plot):
## aes() specificeres i ggplot()
ggplot(data=mpg, aes(x = displ, y = hwy)) +
geom_point()
## aes() specificeres i geom_point()
ggplot(data=mpg) +
geom_point(aes(x = displ, y = hwy))

Geometriske objekter defineres i lag
Du kan visualisere flere geometriske objekter i én graf ved at deklarere dem sekventielt. Når et geometrisk objekt er deklareret, skal det afsluttes med +, og der skal laves et linjeskift for at fortsætte med at deklarere objekter eller indstillinger. Nedenfor bruges data fra mpg til at visualisere sammenhængen mellem motorens volumen (displ) og brændstofforbrug (hwy) med to forskellige geometriske objekter. Det første objekt er geom_point(), som laver et punktdiagram for datapunkterne. Det andet objekt er geom_smooth(), som automatisk beregner en fleksibel regressionslinje for datapunkterne; denne fanger lineære og ikke-lineære mønstre i data.
ggplot(data = mpg, aes(x = displ, y = hwy)) +
geom_point() +
geom_smooth()
Bemærk, at hvert geometrisk objekt arvede æstetisk mapping (aes()) fra ggplot(). Bemærk også, at punkterne ligger under regressionslinjen (blå linje), hvilket skyldes, at geom_point() blev deklareret først i koden ovenfor.
Alle geometriske funktioner har et aes()-argument, hvilket betyder, at den æstetiske mapping i stedet kan deklareres i det geometriske objekt. Nedenstående kode resulterer i en tilsvarende graf som ovenstående, men her deklareres aes() i stedet i hver geom:
ggplot(data = mpg) +
geom_point(aes(x = displ, y = hwy)) +
geom_smooth(aes(x = displ, y = hwy))
En æstetisk mapping kommer til udtryk på forskellige måder i forskellige geoms. Det illustreres nedenfor ved at mappe variablen class (køretøjstype) til argumentet color i aes(). For geom_point() vil dette resultere i, at datapunkterne farvekodes efter køretøjstype. For geom_smooth() vil det betyde, at der beregnes separate regressionslinjer, som farvekodes (med de samme farver):
ggplot(data = mpg, aes(x = displ, y = hwy, color=class)) +
geom_point() +
geom_smooth()
Vi kan ignorere aes() i ggplot() (linje 1) og specificere en separat aes() i geom_smooth() (linje 3). Nedenfor gøres dette ved at mappe color til køretøjets drivlinje (drv).
ggplot(data = mpg, aes(x = displ, y = hwy, color=class)) +
geom_point() +
geom_smooth(aes(color=drv))
Desværre ser vi, at når både class og drv mappes til color, får vi én (i stedet for to) farveforklaring til højre. Det gør, at farvekoder for drv (4, f, r) præsenteres i samme kolonne som farvekoder for class (2seater, compact, midsize, etc). Dette kan skabe tvetydighed ved fortolkningen af grafen. For at undgå dette skal vi mappe drv til et andet argument i aes(). I dette tilfælde kan vi mappe drv til linetype, som er linjetype. Så får hvert niveau i drv sin egen linjetype. Bemærk også, at vi specificerer se=FALSE for at fjerne konfidensintervallet for linjerne samt method="lm", som viser en lineær regressionslinje i stedet for en fleksibel linje (disse tilføjelser laves, for at grafen bliver tydeligere):
ggplot(data = mpg, aes(x = displ, y = hwy, color=class)) +
geom_point() +
geom_smooth(aes(linetype=drv), se=FALSE, method="lm")
Det lykkedes! Kan du se, om sammenhængen mellem displ og hwy varierer med forskellige kombinationer af suv og drv?
Et geometrisk objekt kan bruge en undergruppe af datasættet. Lad os lave ovenstående graf om og kun vise regressionslinjen for biler af klassen pickup:
ggplot(data = mpg, aes(x = displ,
y = hwy,
color=class)) +
geom_point() +
geom_smooth(data=filter(mpg, class=="pickup"))
På samme måde kan vi oprette et geometrisk objekt for at fremhæve en del af data. Vi gør nu følgende:
Linje 8: Tilføj en
geom_point()kun med pickup-biler, med sorte punkter i størrelse 4,5.Linje 9: Tilføj en
geom_point()kun med pickup-biler, i størrelse 2,5. Disse vil arvecolor=classfraggplot().Linje 12: En
geom_smooth()kun med pickup-biler.
ggplot(data = mpg, aes(x = displ,
y = hwy,
color=class)) +
# Alle datapunkter
geom_point() +
# Datapunkter for pickup-biler
geom_point(data=filter(mpg, class=="pickup"), size=4.5, color="black") +
geom_point(data=filter(mpg, class=="pickup"), size=2.5) +
# Linje for pickup-biler
geom_smooth(data=filter(mpg, class=="pickup"))
Formålet med dette er at fokusere grafen på pickup-biler. Punkter med størrelse 2,5 deklareres efter punkter med størrelse 4,5, så de mindre punkter havner oven på de store. Objektet geom_smooth() deklareres allersidst og havner derfor forrest i grafen.