Почему на диаграммах рассеяния в функции ggpairs на них нет слоя лесса? - PullRequest
1 голос
/ 03 марта 2020

У меня быстрый вопрос, и я не могу понять, в чем проблема. Я хотел построить набор данных, который у меня есть, и нашел здесь одно решение: Как использовать метод loess в GGally :: ggpairs с помощью функции wrap

Однако, похоже, я не могу понять, что было не так с моим подходом. Ниже приведен фрагмент кода с простым набором данных mtcars:

library(ggplot2)
library(GGally)


View(mtcars)

GGally::ggpairs(mtcars,
                 lower= list(
                   ggplot(mapping = aes(rownames(mtcars))) + 
                     geom_point()+
                     geom_smooth(method = "loess"))
                )

enter image description here

Здесь, как вы можете видеть, мой вывод, который не помещает гладкий слой на графике рассеяния. Я хотел получить его для регрессионного анализа моего фактического набора данных. Любое направление или объяснение было бы хорошо. Спасибо!

1 Ответ

1 голос
/ 03 марта 2020

Решение в посте из комментария @ Эдварда работает здесь с mtcars. Приведенный ниже фрагмент повторяет ваш сюжет выше с добавленной линией лесса:

library(ggplot2)
library(GGally)

View(mtcars)

# make a function to plot generic data with points and a loess line
my_fn <- function(data, mapping, method="loess", ...){
  p <- ggplot(data = data, mapping = mapping) + 
    geom_point() + 
    geom_smooth(method=method, ...)
  p
}

# call ggpairs, using mtcars as data, and plotting continuous variables using my_fn    
ggpairs(mtcars, lower = list(continuous = my_fn))

В вашем фрагменте второй аргумент lower передает ему объект ggplot, но для этого требуется list со специально названными элементами, которые определяют, что делать с указанными c типами переменных. Элементы в списке могут быть функциями или символьными векторами (но не ggplot объектами). Из документации ggpairs:

верхний и нижний списки, которые могут содержать переменные «непрерывный», «комбинированный», «дискретный» и «na». Каждый элемент списка может быть функцией или строкой. Если указана строка, она должна реализовывать одну из следующих опций:

непрерывный ровно один из ('points', 'smooth', 'smooth_loess', 'density', 'cor', 'blank') , Эта опция используется для непрерывных данных X и Y.

комбинирует ровно одно из ('box', 'box_no_facet', 'dot', 'dot_no_facet', 'facethist', 'facetdensity', 'denstrip', 'пустой'). Эта опция используется либо для непрерывных данных X и категориальных данных Y, либо для категорийных данных X и непрерывных данных Y.

дискретный ровно один из ('facetbar', 'ratio', 'blank'). Эта опция используется для категориальных данных X и Y.

na точно один из ('na', 'blank'). Эта опция используется, когда все данные X равны NA, все данные Y равны NA или все данные X или Y равны NA.

Причина, по которой мой фрагмент работает, заключается в том, что я передал list до lower, с элементом с именем «непрерывный», который является my_fn (который генерирует ggplot).

...