Я не уверен, как это сделать с помощью функции labeller, но еще один вариант - создать переменную группировки, которая объединяет все три ваши категориальные переменные в одну переменную, которая может использоваться для огранки. Вот пример использования встроенного фрейма данных mtcars
и пакета dplyr
для создания новой переменной группировки «на лету». После этого это обновление с функцией, которая позволяет динамически выбирать от одной до трех фасетных переменных.
library(dplyr)
ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")),
aes(wt,mpg)) +
geom_point() +
facet_wrap(~group)
UPDATE: Что касается замечания о гибкости, приведенный ниже код является функцией, которая позволяет пользователю ввести нужный кадр данных и имена переменных, в том числе динамически выбирая фаской на одной, двух или трех столбцов.
library(dplyr)
library(lazyeval)
mygg = function(dat, v1, v2, f1, f2=NA, f3=NA) {
dat = dat %>%
mutate_(group =
if (is.na(f2)) {
f1
} else if (is.na(f3)) {
interp(~paste(f1,f2, sep='-'), f1=as.name(f1), f2=as.name(f2))
} else {
interp(~paste(f1,f2,f3,sep='-'), f1=as.name(f1), f2=as.name(f2), f3=as.name(f3))
})
ggplot(dat, aes_string(v1,v2)) +
geom_point() +
facet_wrap(~group)
}
Теперь давайте попробовать функцию:
library(vcd) # For Arthitis data frame
mygg(Arthritis, "ID","Age","Sex","Treatment","Improved")
mygg(mtcars, "wt","mpg","cyl","am")
mygg(iris, "Petal.Width","Petal.Length","Species")
Благодарю вас, это уверенный работает. Однако я хотел бы узнать, есть ли способ сделать это, используя параметры ggplot2. Я могу захотеть facet_wrap мои графики с использованием разных переменных, а также хочу избежать избыточности в моей таблице данных, которая уже огромна. – beeprogrammer
См. Обновленный ответ. Также обратите внимание, что код не добавляет никаких столбцов в объект фрейма данных. Дополнительный столбец добавляется только в функцию ggplot и не изменяет сам объект фрейма данных. – eipi10