Ответ 1
Вы можете сделать это довольно легко, отступив от функции обертки "qplot" и напрямую используя функции "ggplot" и "geometry".
ggplot(mtcars, aes(x=wt, y=mpg)) +
geom_point(aes(colour=factor(cyl))) +
geom_smooth(method="lm")
Шаг 1. Установите начальные настройки "ggplot". Это настройки, которые вы хотите использовать по умолчанию для функций геометрии.
ggplot(mtcars, aes(x=wt, y=mpg))
В этом случае мы используем данные "mtcars" для всех геометрий с "wt", назначенными на ось x и "mpg", назначенные на ось y. Указав их в начале, мы уменьшаем риск того, что что-то испортим, когда скопируем в геометрические функции.
Шаг 2. Нарисуйте геометрию точки, используя коэффициенты "цил" для окраски точек. Это то, что делала оригинальная функция "qplot", но мы уточняем ее немного более четко.
geom_point(aes(colour=factor(cyl)))
Шаг 3: Нарисуйте сглаженную линейную модель. Это именно то, что написал OP раньше, но теперь, когда эстетика окраски больше не является частью значений по умолчанию, модель рисует по назначению.
geom_smooth(method="lm")
Цепляйте все это вместе с +
et voila!
Для справки: вы могли бы так же легко сделать это, будучи явным в каждом слое, например:
ggplot() +
geom_point(data=mtcars, aes(x=wt, y=mpg, colour=factor(cyl))) +
geom_smooth(data=mtcars, method="lm", aes(x=wt, y=mpg))