R 具有特定轮廓的geom_statdensity2d?

R 具有特定轮廓的geom_statdensity2d?,r,ggplot2,R,Ggplot2,我的目标是能够使用geom\u density2d()geom在用户定义的位置绘制散点图上的等高线。考虑下面的代码: library(ggplot2) n = 100 df = data.frame(x = c(rnorm(n, 0, .5), rnorm(n, 3, .5)), y = c(rnorm(n, 1, .5), rnorm(n, 0, .5))) ggplot(df, aes(x = x, y = y)) + geom_density2d()

我的目标是能够使用
geom\u density2d()
geom在用户定义的位置绘制散点图上的等高线。考虑下面的代码:

library(ggplot2)
n = 100
df = data.frame(x = c(rnorm(n, 0, .5), rnorm(n, 3, .5)),
                y = c(rnorm(n, 1, .5), rnorm(n, 0, .5)))

ggplot(df, aes(x = x, y = y)) +
   geom_density2d() +
   geom_point() 

这将生成标准等高线图,但似乎没有一种方法可以手动控制绘制哪些等高线。可选参数bins和h in可以在某种程度上控制轮廓线(我假设从MASS传递到kde2d),但结果线似乎不可解释

理想情况下,我将能够从ks库复制plot.kde的功能,这些功能可以通过cont参数进行控制

library(ks)
est = kde(df)
plot(est, cont = c(50, 95))

这是我天真的尝试,因为我几乎不编写自定义函数。因此,以下方法可能不是一个好方法。不过,至少代码起到了作用。我的技巧是使用ggplot创建的数据集。首先,绘制一个图形并获取用于该图形的数据,您可以在
ggplot\u build(g)$data[1]
中找到这些数据。在这里,您可以找到一个名为
level
的列。使用该列,可以为每条等高线子集数据。在
myfun()
中,您需要指定所需的级别。该函数使用指定的级别将数据子集并绘制图形

setseed(111)
mydf = data.frame(x = c(rnorm(100, 0, .5), rnorm(100, 3, .5)),
                  y = c(rnorm(100, 1, .5), rnorm(100, 0, .5)))

g <- ggplot(mydf, aes(x = x, y = y)) +
            geom_density2d() +
            geom_point()

### Get a list containing data used for drawing g.

temp <- as.data.frame(ggplot_build(g)$data[1])

### Check which levels you have in g

ind <- unique(temp$level)

ind
#[1] 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20


myfun <- function(...){
               ana <- c(...)
               foo <- subset(temp, level %in% ana)

               g <- ggplot() +
               geom_path(data = foo, aes(x = x, y = y, group = group), colour = "red")

               print(g)

               }

### Run myfun by specify levels you want.
myfun(0.02, 0.10, 0.18)
setseed(111)
mydf=data.frame(x=c(rnorm(100,0.5),rnorm(100,3.5)),
y=c(rnorm(100,1,5),rnorm(100,0,5)))
g也许这是有帮助的: