df<-data.frame(x=runif(n=30,min=-6,max=6),
y=runif(n=30,min=-6,max=10),
z=seq(1,100,length.out=30))
我使用R包 akima 生成轮廓图的z矩阵
library(akima)
M1 <- interp(x=df$x,y=df$y,z=df$z)
contour(x=M1$x,y=M1$y,z=M1$z)
我现在想绘制垂直于轮廓线的箭头,最好使用R-package pracma 中的函数“ quiver”,箭头的原点为(x,y) -坐标,并且箭头指向轮廓线的渐变方向。有办法吗?
到目前为止,我最好的想法是以某种方式提取等高线的(x,y)梯度并将其用作颤动函数中的速度。
感谢您的协助。
答案 0 :(得分:2)
pracma
软件包具有一个gradient
函数,可以使用原始的M1$z
值为您完成此操作。例如,使用您的代码在M1
之后获得set.seed(123)
:
contour(x=M1$x,y=M1$y,z=M1$z, asp = 1) # asp = 1 needed so things look perpendicular
library(pracma)
g <- gradient(M1$z, M1$x, M1$y)
x <- outer(M1$x, M1$y, function(x, y) x)
y <- outer(M1$x, M1$y, function(x, y) y)
quiver(x, y, g$Y, g$X, scale = 0.02, col = "blue")
请注意,quiver
图中的渐变标签已被交换。也许我设置了x
和y
值,这些值是从软件包期望的方式转换而来的。这是您得到的: