Sök…


Anmärkningar

ggplot2 har sin egen perfekta referenswebbplats http://ggplot2.tidyverse.org/ .

Det mesta av tiden är det mer bekvämt att anpassa strukturen eller innehållet i de planerade data (t.ex. en data.frame ) än att justera saker inom tomten efteråt.

RStudio publicerar ett mycket användbart "Data Visualization with ggplot2" -fusk som du hittar här .

Spridningsdiagram

Vi plottar en enkel spridningsdiagram med den inbyggda iris-datauppsättningen enligt följande:

library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) + 
  geom_point()

Detta ger: Exempel på spridningsdiagram med iris-datasätt

Visar flera tomter

Visa flera tomter i en bild med de olika facet . En fördel med denna metod är att alla axlar delar samma skala över diagram, vilket gör det enkelt att jämföra dem på ett ögonkast. Vi använder mpg datasättet som ingår i ggplot2 .

Radera diagram rad för rad (försöker skapa en fyrkantig layout):

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_wrap(~class)

Visa flera diagram på en rad, flera kolumner:

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_grid(.~class)

Visa flera diagram i en kolumn, flera rader:

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_grid(class~.)

Visa flera diagram i ett rutnät med två variabler:

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_grid(trans~class) #"row" parameter, then "column" parameter

Förbered dina data för planering

ggplot2 fungerar bäst med en lång dataram. Följande provdata som representerar priserna för godis på 20 olika dagar, i ett format som beskrivs som brett, eftersom varje kategori har en kolumn.

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

För att konvertera sweetsWide till långt format för användning med ggplot2 , kan flera användbara funktioner från bas R, och paketen reshape2 , data.table och tidyr (i kronologisk ordning) användas:

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

Allt ger ett liknande resultat:

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

Se även Omforma data mellan långa och breda formulär för information om konvertering av data mellan långt och brett format.

De resulterande sweetsLong har en kolumn med priser och en kolumn som beskriver typen av sötsaker. Plottning är nu mycket enklare:

library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()

raddiagram över godisdata

Lägg till horisontella och vertikala linjer för att plotta

Lägg till en gemensam horisontell linje för alla kategoriska variabler

# 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

Lägg till en horisontell linje för varje kategorisk variabel

# 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

Lägg till horisontell linje över grupperade staplar

# 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

Lägg till vertikal linje

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

ange bildbeskrivning här

Vertikalt och horisontellt stapeldiagram

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

ange bildbeskrivning här

Det är möjligt att få ett horisontellt stapeldiagram genom att bara lägga till coord_flip () estetiskt till ggplot-objektet:

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

ange bildbeskrivning här

Fiolplott

Fiolplaner är uppskattningar av kärntäthet som speglas i det vertikala planet. De kan användas för att visualisera flera distributioner sida vid sida, med speglingen som hjälper till att lyfta fram eventuella skillnader.

ggplot(diamonds, aes(cut, price)) +
  geom_violin()

grundläggande fiolplott

Violinplottar namnges för deras likhet med musikinstrumentet, detta är särskilt synligt när de är kopplade till en överlagd boxplot. Denna visualisering beskriver sedan de underliggande fördelningarna både när det gäller Tukeys sammanfattning av 5 siffror (som ruta) och fullständiga uppskattningar av kontinuerlig densitet (violiner).

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

fiolplott med boxplott

Producera grundläggande tomter med qplot

qplot är avsett att likna funktionen bas r plot() och försöker alltid plotta dina data utan att kräva för mycket specifikationer.

grundläggande qplot

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

ange bildbeskrivning här

lägga till färger

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

ange bildbeskrivning här

lägga till en jämnare

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

ange bildbeskrivning här



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow