R Language
ggplot2
Szukaj…
Uwagi
ggplot2
ma własną doskonałą stronę referencyjną http://ggplot2.tidyverse.org/ .
data.frame
większość czasu wygodniej jest dostosować strukturę lub zawartość drukowanych danych (np. data.frame
) niż później dostosowywać rzeczy na wykresie.
RStudio publikuje bardzo pomocną ściągawkę „Wizualizacja danych za pomocą ggplot2”, którą można znaleźć tutaj .
Wykresy punktowe
Wykreślamy prosty wykres rozproszenia przy użyciu wbudowanego zestawu danych tęczówki w następujący sposób:
library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) +
geom_point()
Wyświetlanie wielu wykresów
Wyświetlaj wiele wykresów na jednym obrazie z różnymi funkcjami facet
. Zaletą tej metody jest to, że wszystkie osie mają tę samą skalę na wykresach, co ułatwia ich porównanie na pierwszy rzut oka. Użyjemy zestawu danych mpg
zawartego w ggplot2
.
Zawijaj wykresy linia po linii (próbuje utworzyć układ kwadratowy):
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_wrap(~class)
Wyświetlaj wiele wykresów w jednym wierszu, w wielu kolumnach:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(.~class)
Wyświetl wiele wykresów w jednej kolumnie, w wielu wierszach:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(class~.)
Wyświetlaj wiele wykresów w siatce według 2 zmiennych:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(trans~class) #"row" parameter, then "column" parameter
Przygotuj swoje dane do kreślenia
ggplot2
działa najlepiej z długą ramką danych. Poniższe przykładowe dane, które reprezentują ceny słodyczy w 20 różnych dniach, w formacie opisanym jako szeroki, ponieważ każda kategoria ma 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
Aby przekonwertować sweetsWide
do długiego formatu do użycia z ggplot2
, można ggplot2
kilku przydatnych funkcji z bazy R oraz pakietów reshape2
, data.table
i tidyr
(w porządku chronologicznym):
# 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)
Wszystkie dają podobny wynik:
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
Zobacz także Przekształcanie danych między długimi i szerokimi formularzami, aby uzyskać szczegółowe informacje na temat konwertowania danych między długim i szerokim formatem.
Otrzymane sweetsLong
ma jedną kolumnę cen i jedną kolumnę opisującą rodzaj słodyczy. Teraz drukowanie jest znacznie prostsze:
library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()
Dodaj poziome i pionowe linie do wydruku
Dodaj jedną wspólną linię poziomą dla wszystkich zmiennych jakościowych
# 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")
Dodaj jedną linię poziomą dla każdej zmiennej kategorialnej
# 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)
Dodaj poziomą linię nad pogrupowanymi paskami
# 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")
Dodaj linię pionową
# 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")
Pionowy i poziomy wykres słupkowy
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")
możliwe jest uzyskanie poziomego wykresu słupkowego poprzez dodanie estetyki coordin_flip () do obiektu ggplot:
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")+
coord_flip()
Fabuła skrzypiec
Wykresy skrzypcowe są szacunkami gęstości jądra odzwierciedlonymi w płaszczyźnie pionowej. Można ich użyć do wizualizacji kilku dystrybucji obok siebie, a odbicie lustrzane pomaga uwidocznić wszelkie różnice.
ggplot(diamonds, aes(cut, price)) +
geom_violin()
Działki skrzypcowe są nazwane ze względu na ich podobieństwo do instrumentu muzycznego, co jest szczególnie widoczne, gdy są połączone z nakładaną fabułą skrzynkową. Ta wizualizacja opisuje następnie podstawowe rozkłady zarówno w kategoriach 5-liczbowego podsumowania Tukeya (jako wykresy pudełkowe), jak i pełnych ciągłych oszacowań gęstości (skrzypce).
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")
Twórz podstawowe wykresy za pomocą qplot
Funkcja qplot ma być podobna do podstawowej funkcji r plot()
, starając się zawsze drukować dane bez wymagania zbyt dużej specyfikacji.
podstawowy qplot
qplot(x = disp, y = mpg, data = mtcars)
dodawanie kolorów
qplot(x = disp, y = mpg, colour = cyl,data = mtcars)
dodanie płynniejszego
qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)