如何提取深度轮廓(来自 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)
考虑以下数据,显示在 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)