使用 x、y、z 值绘制等高线
Plotting Contours with x, y, z values
我正在尝试创建 1000 个数据点的等高线图。我有包含所有值的矩阵。这是我的代码。
mu1 <- rbind(2, 2)
mu2 <- rbind(-2, -2)
sigma1 <- rbind(c(.6, 0), c(0, .6))
simga2 <- sigma1
det1 <- det(sigma1)
det2 <- det1
inv1 <- solve(sigma1)
inv2 <- inv1
x <- runif(1000, -5, 5)
y <- runif(1000, -5, 5)
w <- rbind(x, y)
ratio <- function(v){
quotient <- (exp((-1/2)*t(v-mu1)%*%inv1%*%(v-mu1)))/(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)
我想通过 round.z 值绘制 x 和 y 的等高线,其中 round.z=1。我知道 round.z=1 的等高线应该是 y=-x 线,但我不知道如何让它显示出来。感谢您的帮助。
R 中的 contour
和相关函数希望在网格中获取数据,而不是像您这样的随机样本。 akima::interp
函数可以将您的数据转换成这种格式。例如,在 运行 你的代码之后,
library(akima)
grid <- with(df, interp(x, y, round.z))
contour(grid, levels = 10^(0:10))
生成此图像:
我正在尝试创建 1000 个数据点的等高线图。我有包含所有值的矩阵。这是我的代码。
mu1 <- rbind(2, 2)
mu2 <- rbind(-2, -2)
sigma1 <- rbind(c(.6, 0), c(0, .6))
simga2 <- sigma1
det1 <- det(sigma1)
det2 <- det1
inv1 <- solve(sigma1)
inv2 <- inv1
x <- runif(1000, -5, 5)
y <- runif(1000, -5, 5)
w <- rbind(x, y)
ratio <- function(v){
quotient <- (exp((-1/2)*t(v-mu1)%*%inv1%*%(v-mu1)))/(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)
我想通过 round.z 值绘制 x 和 y 的等高线,其中 round.z=1。我知道 round.z=1 的等高线应该是 y=-x 线,但我不知道如何让它显示出来。感谢您的帮助。
R 中的 contour
和相关函数希望在网格中获取数据,而不是像您这样的随机样本。 akima::interp
函数可以将您的数据转换成这种格式。例如,在 运行 你的代码之后,
library(akima)
grid <- with(df, interp(x, y, round.z))
contour(grid, levels = 10^(0:10))
生成此图像: