Визуализация сети, которая ограничивает узлы в многоугольнике шейп-файла - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать сетевую визуализацию данных трассировки контактов, но ограничиваю группы узлов координатами ГИС или произвольно внутри многоугольника файла формы.

В идеале это должно быть в рамках ggplot2, чтобы я мог интегрироваться с другими картами, но если бы существовал igraph или другие решения, я тоже был бы счастлив.

Пример сети контактов из виньетки ggnetwork, распределяющей узлы с использованием принудительно-направленного алгоритма.

library(network)
library(sna)
library(ggnetwork)
n <- network(rgraph(10, tprob = 0.2), directed = FALSE)
n %v% "family" <- sample(letters[1:3], 10, replace = TRUE)
n %v% "importance" <- sample(1:3, 10, replace = TRUE)
e <- network.edgecount(n)
set.edge.attribute(n, "type", sample(letters[24:26], e, replace = TRUE))
set.edge.attribute(n, "day", sample(1:3, e, replace = TRUE))

ggplot(n, aes(x = x, y = y, xend = xend, yend = yend)) +
  geom_edges(color = "black") +
  geom_nodes(color = "black", size = 8) +
  geom_nodetext(aes(color = family, label = LETTERS[ vertex.names ]),
                fontface = "bold") +
  theme_blank()

Немного заглянем под капот:

ggnetwork(n)

            x         y family importance  na.x vertex.names      xend      yend day
1   0.9716994 0.2514118      b          3 FALSE            1 0.9716994 0.2514118  NA
2   0.2287786 0.3320298      a          3 FALSE            2 0.2287786 0.3320298  NA
3   1.0000000 0.6549319      c          3 FALSE            3 1.0000000 0.6549319  NA
4   0.6364260 0.6691008      b          2 FALSE            4 0.6364260 0.6691008  NA
5   0.5913509 0.2442173      b          3 FALSE            5 0.5913509 0.2442173  NA
6   0.2744755 0.7079372      c          2 FALSE            6 0.2744755 0.7079372  NA
7   0.4569772 1.0000000      a          3 FALSE            7 0.4569772 1.0000000  NA
8   0.0000000 0.5340600      a          2 FALSE            8 0.0000000 0.5340600  NA
9   0.8101132 0.0000000      b          1 FALSE            9 0.8101132 0.0000000  NA
10  0.8281340 0.3730087      c          2 FALSE           10 0.8281340 0.3730087  NA
17  0.0000000 0.5340600      a          2 FALSE            8 0.2287786 0.3320298   1
21  0.0000000 0.5340600      a          2 FALSE            8 0.2744755 0.7079372   2
41  0.2744755 0.7079372      c          2 FALSE            6 0.2287786 0.3320298   3
51  0.2744755 0.7079372      c          2 FALSE            6 0.6364260 0.6691008   3
61  0.4569772 1.0000000      a          3 FALSE            7 0.6364260 0.6691008   2
71  0.4569772 1.0000000      a          3 FALSE            7 0.2744755 0.7079372   2
81  0.5913509 0.2442173      b          3 FALSE            5 0.9716994 0.2514118   3
91  0.5913509 0.2442173      b          3 FALSE            5 0.2287786 0.3320298   3
101 0.5913509 0.2442173      b          3 FALSE            5 0.6364260 0.6691008   3
11  0.6364260 0.6691008      b          2 FALSE            4 1.0000000 0.6549319   3
12  0.8101132 0.0000000      b          1 FALSE            9 0.5913509 0.2442173   2
13  0.8101132 0.0000000      b          1 FALSE            9 0.9716994 0.2514118   2
14  0.8281340 0.3730087      c          2 FALSE           10 0.9716994 0.2514118   3
15  0.8281340 0.3730087      c          2 FALSE           10 0.6364260 0.6691008   2
16  0.8281340 0.3730087      c          2 FALSE           10 0.8101132 0.0000000   3
18  1.0000000 0.6549319      c          3 FALSE            3 0.9716994 0.2514118   2
     na.y type
1      NA <NA>
2      NA <NA>
3      NA <NA>
4      NA <NA>
5      NA <NA>
6      NA <NA>
7      NA <NA>
8      NA <NA>
9      NA <NA>
10     NA <NA>
17  FALSE    z
21  FALSE    z
41  FALSE    z
51  FALSE    y
61  FALSE    y
71  FALSE    y
81  FALSE    y
91  FALSE    y
101 FALSE    x
11  FALSE    x
12  FALSE    z
13  FALSE    z
14  FALSE    z
15  FALSE    y
16  FALSE    z
18  FALSE    z

Я полагаю, что мог бы рандомизировать пары x / y внутри каждого многоугольника (например, splancs :: csr или sp :: spsample), но, очевидно, на выходе получился бы беспорядок линий и точек.

Можно ли использовать силовой алгоритм для алгоритмического распределения групп узлов в пределах определенных ограничений координат?

...