我试图用具有已知均值和协方差的2D高斯分布来增加具有轮廓的图.理想情况下,我只需要指定函数,它将在2D中绘制(如stat_function2维除外).我可以geom_raster通过生成概率网格来实现.我能geom_contour2d以某种方式使用吗?
m <- c(.5, -.5)
sigma <- matrix(c(1,.5,.5,1), nrow=2)
data.grid <- expand.grid(s.1 = seq(-3, 3, length.out=200), s.2 = seq(-3, 3, length.out=200))
q.samp <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m, sigma = sigma))
ggplot(q.samp, aes(x=s.1, y=s.2)) +
geom_raster(aes(fill = prob)) +
coord_fixed(xlim = c(-3, 3), ylim = c(-3, 3), ratio = 1)
Run Code Online (Sandbox Code Playgroud)
我正在咆哮错误的树看2d东西。你可以geom_contour通过添加z美感来实现我想要的:
m <- c(.5, -.5)
sigma <- matrix(c(1,.5,.5,1), nrow=2)
data.grid <- expand.grid(s.1 = seq(-3, 3, length.out=200), s.2 = seq(-3, 3, length.out=200))
q.samp <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m, sigma = sigma))
ggplot(q.samp, aes(x=s.1, y=s.2, z=prob)) +
geom_contour() +
coord_fixed(xlim = c(-3, 3), ylim = c(-3, 3), ratio = 1)
Run Code Online (Sandbox Code Playgroud)
我将使用该ellipse包直接构建轮廓数据。这仍然需要单独的调用来构建数据,但比构建整个网格然后查找轮廓的解决方案要高效得多(在空间和时间上)。
library(ellipse)
library(plyr) ## not necessary, but convenient
m <- c(.5, -.5)
sigma <- matrix(c(1,.5,.5,1), nrow=2)
alpha_levels <- seq(0.5,0.95,by=0.05) ## or whatever you want
names(alpha_levels) <- alpha_levels ## to get id column in result
contour_data <- ldply(alpha_levels,ellipse,x=sigma,
scale=c(1,1), ## needed for positional matching
centre=m)
Run Code Online (Sandbox Code Playgroud)
(你可以使用lapplyandrbind来自基本 R;plyr::ldply只是一个快捷方式)
现在绘制:
library(ggplot2)
ggplot(contour_data,aes(x,y,group=.id))+geom_path()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2215 次 |
| 最近记录: |