R:绘制垂直于轮廓线的箭头

时间:2018-10-23 11:53:14

标签: r gradient contour arrows

我有两个向量,分别表示散点图中的x和y坐标,以及每个变量(z,y)的第三变量(z),分别代表从中绘制轮廓线的变量。示例数据如下:

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)梯度并将其用作颤动函数中的速度。

感谢您的协助。

1 个答案:

答案 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图中的渐变标签已被交换。也许我设置了xy值,这些值是从软件包期望的方式转换而来的。这是您得到的:

enter image description here