R: нанесите стрелки перпендикулярно контурным линиям - PullRequest
0 голосов
/ 23 октября 2018

У меня есть два вектора, представляющих x и y-координаты в точечной диаграмме, и третью переменную (z) для каждой (x, y) -координаты, представляющей переменную, из которой можно нарисовать контурные линии.Пример данных приведен ниже:

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)

I сейчасхочу нарисовать стрелки перпендикулярно к контурным линиям, предпочтительно используя что-то вроде функции «колчан» в R-пакете pracma , с началом стрелки на каждой (x, y) -координате и со стрелкойуказывая в направлении градиента контуров.Есть ли способ сделать это?

Моя лучшая идея на данный момент состоит в том, чтобы каким-то образом извлечь (x, y) -градиенты контуров и использовать их в качестве скоростей в функции колчана.

Благодарноза любую помощь.

1 Ответ

0 голосов
/ 23 октября 2018

Пакет 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, транспонированные так, как ожидает пакет.Вот что вы получите:

enter image description here

...