geom_smooth с facet_grid и различными функциями подгонки
Прежде всего, извинения за пример, но я не смог найти лучший набор данных, чтобы продемонстрировать проблему. Надеюсь, этого будет достаточно. Скажем, я пытаюсь сделать грань сетки передачи (автоматическую или ручную) и количество передач от mtcars
набор данных, который отображает миль на галлон против смещения, например:
# Load library
library(ggplot2)
# Load data
data(mtcars)
# Plot data
p <- ggplot(mtcars,aes(x = disp, y = mpg)) + geom_point() + facet_grid(gear ~ am)
p <- p + geom_smooth()
print(p)
который дает,
Обратите внимание, я добавил линию тренда, используя geom_smooth
и по умолчанию используется кривая лёсса. Я могу соответствовать пользовательским функциям, а не кривой Лёсса, используя nls
для метода, а затем с указанием формулы, которая отлично. Но возможно ли подогнать разные заданные пользователем кривые для каждого аспекта? Например, линейная регрессия к верхней левой панели и экспоненциальная убывание для правой нижней части. Это возможно? Или я использую молоток для ввинчивания винтов?
РЕДАКТИРОВАТЬ: здесь представлено решение для пользовательских (т.е. пользовательских) функций подгонки.
1 ответ
Следуя приведенным здесь предложениям, возможное решение:
# Load library
library(ggplot2)
# Load data
data(mtcars)
# Vector of smoothing methods for each plot panel
meths <- c("loess","lm","lm","lm","lm","lm","lm")
# Smoothing function with different behaviour in the different plot panels
mysmooth <- function(formula,data,...){
meth <- eval(parse(text=meths[unique(data$PANEL)]))
x <- match.call()
x[[1]] <- meth
eval.parent(x)
}
# Plot data
p <- ggplot(mtcars,aes(x = disp, y = mpg)) + geom_point() + facet_grid(gear ~ am)
p <- p + geom_smooth(method="mysmooth")
print(p)