如何提取深度轮廓(来自 DepthProc 的 depthContour)以在 ggpplot2 中使用它们?

How to extract depth contours (depthContour from DepthProc) to use them in ggpplot2?

考虑以下数据,显示在 ggplot2 中:

## Data in a data.frame
x <- rnorm(n=1E3, sd=2)
y <- x*1.2 + rnorm(n=1E3, sd=2)
df <- data.frame(x,y)

library(ggplot2)
ggplot(df, aes(x, y)) +
  geom_point()

现在,使用 DepthProc 包中的 depthContour 函数考虑以下深度轮廓:

library(DepthProc)
depthContour(df, depth_params = list(
               method = "Local",
               beta = 0.1,
               depth_params1 = list(method = "Projection")
             ))

是否可以只提取黑色深度轮廓线(即没有填充颜色)以便将它们添加到 ggplot2 图形中?

欢迎任何帮助

类似的东西(由于基于 rnorm 的初始数据,不完全相同的等高线图)。

#See depthContour function from the DepthProc package at:
#https://github.com/zzawadz/DepthProc/blob/7d676879a34d49416fb00885526e27bcea119bbf/R/depthContour.R
    
    ## Data in a data.frame
    x <- rnorm(n=1E3, sd=2)
    y <- x*1.2 + rnorm(n=1E3, sd=2)
    df <- data.frame(x,y)
    
    n <- 50 #for the n*n matrix
    xlim = extendrange(df[, 1], f = 0.1)
    ylim = extendrange(df[, 2], f = 0.1)
    
    x_axis <- seq(xlim[1], xlim[2], length.out = n)
    y_axis <- seq(ylim[1], ylim[2], length.out = n)
    
    xy_surface <- expand.grid(x_axis, y_axis)
    xy_surface <- cbind(xy_surface[, 1], xy_surface[, 2])
    
    ux_list <- list(u = xy_surface, X = df)
    
    library(DepthProc) 
    depth_params = list(method = "Local", beta = 0.1, depth_params1 = list(method = "Projection"))
    depth_params_list <- c(ux_list, depth_params)
    depth_surface_raw <- do.call(depth, depth_params_list) #the higher the 'n', the longer the running process
    depth_surface <- matrix(depth_surface_raw, ncol = n)
    
    # depth_med <- depthMedian(df, depth_params) #for the depth median, if needed
    
    library(reshape2)
    depth_surface_melt <- melt(depth_surface)
    depth_surface_melt <- cbind(xy_surface, depth_surface_melt[, 3])
    depth_surface_melt <- data.frame(depth_surface_melt)
    
    library(ggplot2)
    ggplot(df, aes(x, y))+
      scale_x_continuous(limits=c(-8,10),expand=c(0,0),breaks=c(-8,-5,0,5,10),labels=c("",-5,0,5,10))+
      scale_y_continuous(limits=c(-12,12),expand=c(0,0),breaks=c(-12,-10,-5,0,5,10,12),labels=c("",-10,-5,0,5,10,""))+
      geom_point(color="grey80")+
      geom_contour(depth_surface_melt, mapping=aes(x=X1, y=X2, z=X3), bins=10, color="black", size=0.7)