маркировка/окрашивание элементов/сегментов объекта конопли

У меня есть 3 связанных вопроса для графиков в spatstat:

  1. Как пометить сегмент коноплянки. например просто идентификатор элемента
  2. Как пометить ковариацию, прикрепленную к сегменту конопли на графике
  3. Как контролировать ширину сегмента конопли на графике на основе: ковариации или, например, я хочу, чтобы толщина сегмента была пропорциональна количеству точек, реализованных на этом сегменте из точечного процесса в сети. Итак, если процесс генерирует 10 точек на линейном сегменте и 5 точек на втором сегменте, я хотел бы построить первый сегмент в два раза шире, чем второй сегмент.

Я нашел примеры в книге «Пространственные точечные шаблоны», но они указывают на использование изображения или плотности ядра для управления шириной сегмента. Я использую linfun для неоднородного процесса, и я не нашел метода для окрашивания или контроля ширины линии на моем графике или для маркировки графика.

Пример маленького квадрата:

library(spatstat)

v<-ppp(x=c(50,100,100,50), y=c(50,50,100,100),c(0,150), c(0,150)) #vertices
edg<-matrix(c(1,2,3,4,2,3,4,1), ncol=2) #edges
L<-linnet(v, edges=edg) #create a linnet

z<-c(11,22,33,44) # create covariate
Zfun <- linfun(function(x,y,seg,tp) { seg }, L)

plot(Zfun)

# I added some marks
marks(x) <- runif(npoints(x), 3, 4)

Спасибо


person BKS    schedule 03.01.2017    source источник
comment
Приведите пример linnet и ковариации, прикрепленной к сегментам, о которых вы говорите. Также укажите lpp на маленьком linnet с другим количеством баллов. Также предоставьте linfun...   -  person Ege Rubak    schedule 04.01.2017
comment
Я добавил небольшой пример   -  person BKS    schedule 04.01.2017


Ответы (1)


Все можно сделать, создав подходящую функцию класса linfun.

В качестве примера возьмем сеть L <- simplenet.

На вопрос 1:

f <- linfun(function(x,y,seg,tp) { seg }, L)
plot(f)

Функция f возвращает идентификационный номер сегмента, содержащего указанную точку. Этот номер варьируется от 1 до nsegments(L).

Для вопроса 2 предположим, что у вас есть вектор Z, задающий значение ковариаты для каждого сегмента сети (при условии, что значение ковариаты постоянно на каждом сегменте). Возьму пример Z <- runif(nsegments(L)). Затем

 g <- linfun(function(x,y,seg,tp) { Z[seg] }, L)
 plot(g)

На вопрос 3,

 plot(g, style="width")

См. help(plot.linfun) и help(plot.linim) (в основном plot.linfun преобразует функцию в пиксельное изображение, а затем вызывает plot.linim).

person Adrian Baddeley    schedule 04.01.2017
comment
Спасибо. Когда я следую вашему предложению, он создает легенду с цветами, и каждому сегменту назначается цвет. На самом деле я хотел label on the segments in plot itself. Я имею в виду текст (значение ковариат, значение реализованных точек или идентификатор самого сегмента) для отображения вдоль сегментов графика. Возможно ли это? Я хочу использовать графики спатастата, а не передавать их в какой-либо пакет ГИС или внешнюю программу ГИС. - person BKS; 04.01.2017
comment
Хорошо, тогда просто используйте S <- as.psp(L), чтобы преобразовать линейную сеть в список сегментов линии, затем M <- midpoints.psp(S), чтобы найти положение средней точки каждого сегмента, затем plot(L); text(M, labels=Z), чтобы нанести метки. См. ?text.default аргументы для настройки положения меток. - person Adrian Baddeley; 05.01.2017
comment
Спасибо, это отвечает на все мои вопросы в этом вопросе. :) - person BKS; 05.01.2017