Transformacje zmiennych, skali, współrzędnych w ggplot2

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

2 thoughts on “Transformacje zmiennych, skali, współrzędnych w ggplot2”

  1. 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))

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *