使用ggplot2叠加两个二元高斯分布的轮廓

时间:2018-05-12 06:57:25

标签: r ggplot2

我想使用ggplot2在每个轮廓上使用不同的颜色在同一图表上叠加两个双变量高斯分布的轮廓。我查看了之前关于如何绘制双变量高斯(Plot multivariate Gaussian contours with ggplot2)等高线的文章。但那只是绘制一个轮廓。我尝试使用stat_density2d,但没有成功。这是我的代码,可重复的例子。

set.seed(13)
m1 <- c(.5, -.5)
sigma1 <- matrix(c(1,.5,.5,1), nrow=2)

m2 <- c(0, 0)
sigma2 <- matrix(c(140,67,67,42), nrow=2)


data.grid <- expand.grid(s.1 = seq(-25, 25, length.out=200), s.2 = seq(-25, 
25, length.out=200))
q.samp <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m2, 
sigma = sigma2))
ggplot(q.samp, aes(x=s.1, y=s.2, z=prob)) + 
    geom_contour() +
    coord_fixed(xlim = c(-25, 25), ylim = c(-25, 25), ratio = 1) 

2 个答案:

答案 0 :(得分:4)

如果我按照您的代码并从参数中创建q1.sampq2.samp

 q2.samp = cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m2, sigma=sigma2))
 q1.samp = cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m1, sigma=sigma1))

然后我可以这样做:

 ggplot() + 
  geom_contour(data=q1.samp,aes(x=s.1,y=s.2,z=prob)) +    
  geom_contour(data=q2.samp,aes(x=s.1,y=s.2,z=prob),col="red")

然后我得到一组默认颜色的轮廓和一组红色。

enter image description here

答案 1 :(得分:3)

另一个选择是将数据组合成一个data.frame并将颜色映射到&#34; origin&#34;数据来自何处。如果您需要一个及其所有好处(如映射颜色),这将为您提供方便的图例。

function editBaancode(){var n="<div class='dropdown'>",o=n.concat(n,"<button onclick=myFunction() class='dropbtn'>Dropdown</button>","<div id='myDropdown' class='dropdown-content'>","<div id='myDropdown' class='dropdown-content'><input type='text' placeholder='Search..' id='myInput' onkeyup=filterFunction()","><a>About</a>","<a>Base</a>","<a>Blog</a>","<a href=#>CREATE</a>","</div>","</div>");document.getElementById("mylocation").innerHTML=o}function myFunction(){alert("executing on button click")}window.onload=function(){editBaancode()};

enter image description here