Przygotowuję nowy rozdział ,,Esejów…”. Będzie on dotyczył The Grammar of Graphics i jej implementacji w pakiecie ggplot2
. Systematyzując poszczególne elementy składni zdarzają się różne smaczki i dzisiaj o jednym z nich, czyli o tym jak na wykresach stosować transformacje.
Zacznijmy od wykresu bez żadnych transformacji. Za przykład wykorzystamy dane o irysach. Do wykresu dodamy punkty (geom_point
) oraz prostą trendu liniowego (geom_smooth
).
library(ggplot2) # Uchwyt: # archivist::aread("pbiecek/Eseje/arepo/0fc9e4e43559336a44598117911f2e4f") ggplot(iris, aes(Sepal.Length, Petal.Length)) + geom_point() + geom_smooth(se=FALSE, method="lm") + theme_bw() |
Zobaczmy jak wygląda ta zależność po transformacji logarytmicznej.
Pakiet ggplot2
przewiduje transformacje na trzech poziomach: zmiennych, skali i układu współrzędnych. Zobaczmy czym się one różnią i jak je wykonać.
Transformacje zmiennych
Transformacje logarytmiczną zmiennych można wykonać albo w funkcji definiującej mapowania aes()
, albo poza funkcją ggplot()
. Poniżej przykład pierwszej z tych możliwości. W konsekwencji wykres przedstawia zależność log-długości sepali do log-długości petali. Na osiach są log-wartości i do zlogarytmowanych wartości dopasowywany jest trend liniowy.
# Uchwyt: # archivist::aread("pbiecek/Eseje/arepo/b3c778ffbff4e9256ddc94cb423bc58a") ggplot(iris, aes(log10(Sepal.Length), log10(Petal.Length))) + geom_point() + geom_smooth(se=FALSE, method="lm") + theme_bw() |
Transformacje układu współrzędnych
Druga możliwość to transformacja układu współrzędnych. Zmieniamy osie na wykresie na logarytmiczne a następnie wartości i statystyki (np. trend liniowy) z oryginalnego wykresu przedstawiamy w nowym układzie współrzędnych.
W tym nowym układzie współrzędnych trend liniowy może nie wyglądać na liniowy, tak jak na poniższym przykładzie.
Statystyki z danych są wyliczane przed zmianą osi.
Transformacje układu współrzędnych wykonać można funkcją coord_trans
.
# Uchwyt: # archivist::aread("pbiecek/Eseje/arepo/3d12e66a581545ac99cb0d5e273487a5") ggplot(iris, aes(Sepal.Length, Petal.Length)) + geom_point() + coord_trans(ytrans="log", xtrans="log") + geom_smooth(se=FALSE, method="lm") + theme_bw() |
Transformacje skali
Trzecia możliwość to transformacje skali. Jeżeli chodzi o wygląd osi wykresu oraz punktów na wykresie, są one takie jak dla transformacji układu współrzędnych.
Różnica polega na tym, że statystyki są wyznaczane po transformacji.
Czyli w poniższym przykładzie trend liniowy jest już wyznaczany na zlogarytmowanych danych, wygląda jak linia prosta (i staje się trendem multiplikatywnym).
Transformacje skali można wykonać funkcjami do opisu skal, np. scale_y_log10
.
# Uchwyt: # archivist::aread("pbiecek/Eseje/arepo/2500b1e21379508414d41ca88d93c6bb") ggplot(iris, aes(Sepal.Length, Petal.Length)) + geom_point() + scale_y_log10(breaks=1:10) + scale_x_log10(breaks=1:10) + geom_smooth(se=FALSE, method="lm") + theme_bw() |
Archivist z CRANu nie działa z tymi uchwytami ( komunikat: bad restore file magic number (file may be corrupted) — no data loaded)
Ja w ggplot cenię współrzędne biegunowe:
ggplot(iris, aes(Sepal.Length, Petal.Length)) +
geom_point() +
geom_smooth(se=FALSE, method=”lm”) +
theme_bw() +
coord_polar()
Warto wspomnieć, że pakiet scales zawiera również inne użyteczne transformacje:
p <- ggplot(iris, aes(Sepal.Length, Petal.Length)) +
geom_point() +
geom_smooth(se=FALSE, method="lm") +
theme_bw()
p + coord_trans(xtrans = "exp")
#alternatywnie
p + coord_trans(xtrans = exp_trans())
p + coord_trans(xtrans = boxcox_trans(-0.5))
Dzięki, wysłałem wersję 1.6 na CRAN.