ggplot2: Добавьте метки контуров на график плотности ядра, созданный с помощью geom_density_2d

#r #ggplot2

Вопрос:

Есть ли способ добавить метки контуров на 2D-график плотности ядра, созданный с использованием geom_density_2d в ggplot2?

 library(ggplot2)

# load data
data("meuse")

# plot
ggplot(meuse, aes(x=x, y=y))  
  geom_density_2d()
 

введите описание изображения здесь

Я попытался извлечь построенные данные из построенного объекта ggplot, чтобы передать их в geom_text_contour из metR, но данные, которые он возвращает, представляют собой набор точек, которые используются для построения контурных линий, а не сетки координат x/y, которые понадобились бы geom_text_contour.

 # extract denisty 2d
data <- ggplot_build(p)$data[[1]]
p   geom_path(data=data, 
              mapping=aes(color=nlevel, group=group), 
              color='red')
 

введите описание изображения здесь

Я хочу сделать что-то подобное (этот пример взят из документации geom_text_contour).

введите описание изображения здесь

Ответ №1:

Насколько я могу видеть, geom_text_contour требуется geom_contour статистика, которая, в свою очередь, требует объекта, подобного растру, а не набора точек, как у вас здесь. Однако существует библиотека «directlabels», с которой можно работать geom_density_2d . Этот пример очень уродлив, но, надеюсь, поможет вам начать! Я изменил масштаб оси, чтобы сделать значения контуров более управляемыми.

 library(directlabels)

g1 <- ggplot(meuse %>% mutate(x=x/1000, y=y/1000), aes(x=x, y=y))  
  geom_density_2d(aes(colour = ..level..))

direct.label(g1, list(top.pieces, colour = 'black'))
 

контурный график с обозначенными контурами