Вопрос по r, facet, ggplot2 – ggplot - фасет по выводу функции

9

Я не уверен, как следует учитывать функцию данных вdata элементggplot объект. В следующем примере с игрушкой я хочу сделать что-то вроде этого:

df <- data.frame(x=1:8, y=runif(8), z=8:1)
ggplot(df, aes(x=x, y=y)) + geom_point() + facet_wrap( ~ (z %% 2))

Но это дает ошибку:Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting.

Я могу достичь желаемого результата, преобразовав фрейм данных:

ggplot(transform(df, z=z%%2), aes(x=x, y=y)) + geom_point() + facet_wrap( ~ z)

но часто желательно не использовать такое преобразование, например, если мне уже далиggplot объект, и я хочу добавить некоторую специальную огранку к нему.

Ваш Ответ

1   ответ
3

но мне так и не удалось это исправить - я думаю, что обработка фасетных переменных просто менее мощная, чем эстетическая обработка переменных.

Отвечая вашему корневому требованию - специальная фасетка существующего ggplot; обратите внимание, что вы можете заменить оптовый (основной) набор данных существующегоR ggplot - например

myplot %+% transform(myplot$data, z=z%%2)
myplot$data$zz <- myplot$data$z%%2 может быть даже более простым.
@ Джош, правда, но полагается на уже установленный набор данных. Иногда я строю ggplots без данных, а затем применяю несколько наборов данных.
Это удивительно похоже на решение, которое я тоже использовал -myplot$data <- transform(myplot$data, z=z%%2) , Я получил сожжение пространства имен пару раз%+% потому что какой-то другой пакет определил тот же оператор. Взял меняhours чтобы понять это. Ken Williams

Похожие вопросы