Wykonuję teraz analizę w ggplot2 dla projektu i przez przypadek natknąłem się na niektóre (dla mnie) dziwne zachowanie, którego nie potrafię wyjaśnić. Kiedy piszę aes(x = cyl, ...)
, działka wygląda inaczej, co robi, jeśli przekażę tę samą zmienną za pomocą aes(x = mtcars$cyl, ...)
. Kiedy usuwam facet_grid(am ~ .)
oba wykresy są takie same. Poniższy kod jest wzorowana kodu w moim projekcie, który generuje ten sam problem:Problem podczas przekazywania zmiennej z notacją na znak dolara do aes() w połączeniu z facet_grid() lub facet_wrap()
library(dplyr)
library(ggplot2)
data = mtcars
test.data = data %>%
select(-hp)
ggplot(test.data, aes(x = test.data$cyl, y = mpg)) +
geom_point() +
facet_grid(am ~ .) +
labs(title="graph 1 - dollar sign notation")
ggplot(test.data, aes(x = cyl, y = mpg)) +
geom_point()+
facet_grid(am ~ .) +
labs(title="graph 2 - no dollar sign notation")
Oto obraz Wykres 1:
Oto obraz wykresu 2:
Znalazłem, że mogę obejść ten problem, używając aes_string
zamiast aes
i przekazując nazwy zmiennych jako łańcuchy, ale chciałbym zrozumieć, dlaczego ggplot zachowuje się w ten sposób. Problem występuje również w podobnych próbach z facet_wrap
.
Dużo za pomoc z góry! Czuję się bardzo niewygodne, jeśli nie rozumieją, że właściwie ...
krótka odpowiedź brzmi: * nie * użyć '$' 'w AES()' – baptiste
^_^po szoku dostałam dzisiaj, kiedy mój wykres nagle wszystko wyglądało dziwnie, nie będę robić to ponownie. Nadal chciałbym zrozumieć, co się dzieje, ponieważ nigdy wcześniej nie spotkałem się z tym problemem/zachowaniem. – Christoph
gdy ggplot buduje wykres, jeśli dzieli zbiór danych dla każdej warstwy na grupy, zdefiniowane przez estetykę i fasetowanie.Aby ta grupa była wiarygodna, potrzebujesz zmiennych pochodzących z pojedynczego elementu data.frame, w przeciwnym razie ggplot może skończyć się przy użyciu innej kolejności dla współczynnika facylitacji i reszty mapowania. – baptiste