Interaktywnie, ten przykład działa dobrze:ggplot2 + aes_string wewnątrz funkcji poprzez interfejs wzorze
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + facet_grid(. ~ vs)
Teraz dokonać funkcji z interfejsem formuły i używać aes_string
zrobić to samo, i to nie działa (błąd jest: Error in layout_base(data, cols, drop = drop) : At least one layer must contain all variables used for facetting
):
tf <- function(formula, data) {
res <- as.character(formula[[2]])
fac2 <- as.character(formula[[3]][3])
fac1 <- as.character(formula[[3]][2])
# p <- ggplot(aes_string(x = fac1, y = res), data = data)
# p <- p + geom_point() # original attempt
p <- ggplot() # This is Joran's trick, but it doesn't work here
p <- p + geom_point(aes_string(x = fac1, y = res), data = data)
p <- p + facet_grid(.~fac2) # comment this out, and it works but
# of course is not faceted
}
p <- tf(formula = wt ~ am*vs, data = mtcars)
Przez podstęp Jøran za odsyłam do here, które jest podobne pytanie napisałem niedawno. W tym przypadku ggplot2
nie widzi mojej prośby facetingowej. Dokonanie tego facet_grid(".~fac2")
nie przyniosło efektu. Propozycje? Ciągle jestem pod wpływem tych rzeczy. Dzięki!
Co jest wartością przykład z 'fac2'? (Czy to tylko wektor, czy bardziej skomplikowana formuła?) –
'fac2' będzie jak' fac1', łańcuch znaków podający nazwę kolumny ramki danych, która jest współczynnikiem lub wymodelowaniem do jednej. Jest odtwarzalny, spójrz na ostatnią linię, używając 'mtcars'. –
Myślę, że o wiele łatwiej będzie mieć formułę facylitacji jako drugi argument, w przeciwnym razie będziesz musiał zbudować nowy parser, ale chcesz odróżnić zmienne faced i współrzędne – mnel