首页 > 解决方案 > 如何获得R轮廓函数来绘制小数

问题描述

我正在尝试绘制由两个高斯组成的函数的轮廓,一个以 (2, 2) 为中心,另一个以 (-2, -2) 为中心。这是我的代码。

k1 <- 2
k2 <- 2
mu1 <- rbind(2, 2)
mu2 <- rbind(-2, -2)
sigma1 <- rbind(c(.6, 0), c(0, .6))
sigma2 <- rbind(c(.3, 0), c(0, .3))
det1 <- det(sigma1)
det2 <- det(sigma2)
inv1 <- solve(sigma1)
inv2 <- solve(sigma2)
x <- runif(1000, -5, 5)
y <- runif(1000, -5, 5)
w <- rbind(x, y)
ratio <- function(v){
  quotient <- log((2*pi)^(-k1/2)*det1^(-1/2)*(exp((-1/2)*t(v-mu1)%*%inv1%*%(v-mu1))))/log((2*pi)^(-k2/2)*det2^(-1/2)*(exp((-1/2)*t(v-mu2)%*%inv2%*%(v-mu2))))
  return(quotient)
}

z <- apply(w, 2, ratio)
round.z <- round(z, digits=0)
df <- cbind(x, y, z, round.z)
df <- as.data.frame(df)

grid <- with(df, interp(x, y, z))
contour(grid, levels=0:10, asp=1)

但是当我绘制这些轮廓时,我只会得到具有整数值的轮廓。它看起来像这样: 在此处输入图像描述

在第一个象限中应该有更多相似的轮廓,这些轮廓具有十进制值(因为我正在取一个比率),但它们没有出现。我似乎无法找到如何让轮廓()来绘制小数。有谁知道如何解决这个问题?

标签: r

解决方案


正如 user2554330 评论的那样,我可以使用 levels=c((0:10)/10, 2:10)。谢谢他们!


推荐阅读