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()

Dit geeft: Voorbeeld spreidingsplot met behulp van iris-gegevensset

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()

lijngrafiek van snoepgegevens

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")

Plot1

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)

Plot2

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")

Plot3

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")

voer hier de afbeeldingsbeschrijving in

Verticaal en horizontaal staafdiagram

ggplot(data = diamonds, aes(x = cut, fill =color)) +
  geom_bar(stat = "count", position = "dodge")

voer hier de afbeeldingsbeschrijving in

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()

voer hier de afbeeldingsbeschrijving in

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()

basis viool plot

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")

viool plot met boxplot

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)

voer hier de afbeeldingsbeschrijving in

kleuren toevoegen

qplot(x = disp, y = mpg, colour = cyl,data = mtcars)

voer hier de afbeeldingsbeschrijving in

vloeiender toevoegen

qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)

voer hier de afbeeldingsbeschrijving in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow