Как отфильтровать данные вне заданного контура из geom_density2d - PullRequest
0 голосов
/ 02 апреля 2020

Контекст

Предположим, что 2D-данные data.frame доступны в https://www.r-graph-gallery.com/2d-density-plot-with-ggplot2.html

Данные

#library(tidyverse)
a <- data.frame( x=rnorm(20000, 10, 1.9), y=rnorm(20000, 10, 1.2))
b <- data.frame( x=rnorm(20000, 14.5, 1.9), y=rnorm(20000, 14.5, 1.9))
c <- data.frame( x=rnorm(20000, 9.5, 1.9), y=rnorm(20000, 15.5, 1.9))
data <- rbind(a,b,c)

Диаграмма рассеяния и плотность

Предположим, теперь объект ggplot "ggobj" включает в себя функцию geom_density2d с 10 ячейками (то есть с 10 по 10 процентили 2Dkde распределение):

ggobj <- ggplot(data, aes(x=x, y=y)) +
geom_point() +
geom_density2d(aes(x=x, y=y), bins=10)

Вопрос

Как добавить третий столбец с именем "out" в data.frame "data", который бы классифицировал данные вне внешнего контур как «0» (т.е. вне 90-го процентиля), а контур как «1» (т.е. внутри 90-го процентиля)?

Примечание:

1) Было бы желательно получить подробное объяснение ( то есть какие данные, слои ... из "ggobj" используются, какие дополнительные функции ...)

2) Код для раскраски графиков, помеченных как "out" красным, также был бы очень полезен.

...