R Language
ggplot2
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()
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()
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")
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)
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")
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")
Vertikalt och horisontellt stapeldiagram
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")
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()
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()
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")
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)
lägga till färger
qplot(x = disp, y = mpg, colour = cyl,data = mtcars)
lägga till en jämnare
qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)