Igraph: заполнение / замена вершин одного режима png-картинками в двухрежимной сети;каждая вершина получает собственную картинку - PullRequest
0 голосов
/ 19 февраля 2019

Уважаемые потенциальные помощники,

Я имею дело с двухрежимной сетью в R, используя пакет igraph.Узлами являются страны и международные организации.Я хочу построить сеть с вершинами, представляющими страны, которые заполняются или заменяются флагами стран.После поиска по форуму я нашел здесь флаги: https://www.free -country-flags.com / flag_pack.php? Id = 1 .К сожалению, я не смог найти способ сказать R, что он должен использовать эти png-картинки в качестве вершин страны.Я нашел кое-что очень близкое здесь: R: Создание графиков, где узлами являются изображения Принятый ответ показывает, как заменить все вершины сети одним png-изображением.Тем не менее, я не нашел, как сказать R заменить только один тип вершин и заменить этот тип не только одной картинкой, но и каждой вершиной своей собственной картинкой.

Основано на моих исследованияхдо сих пор моя сеть выглядит так:

library(igraph)
library(png)

affiliation_matrix <- matrix(c(
  1,0,1,0,
  1,1,0,0,
  1,1,1,1,
  1,0,1,1,
  1,1,0,1)
  ,nrow=5
  ,ncol=4
  ,byrow=TRUE
)

dimnames(affiliation_matrix) <- list(
  c("Sweden", "Italy", "Germany", "France", "Spain"),
  c("Organization_1", "Organization_2", "Organization_3", "Organization_4")
)

tmn <- graph.incidence(affiliation_matrix)
set.seed(1)
L <- layout.fruchterman.reingold(tmn)

V(tmn)$color <- ifelse(V(tmn)$type, "lightblue", "salmon")
V(tmn)$shape <- ifelse(V(tmn)$type, "circle", "square")

plot(tmn, layout = L)

График выглядит примерно так:

https://i.stack.imgur.com/M72ZB.png

Теперь я хочу загрузить флагии использовать их.Но я могу сделать это только для одного флага:

 FR <- readPNG("C:/flags_style1_medium/France.png", 
               native = FALSE, info = FALSE)
    # Rescale the layout to -1 to 1
    L[,1]=(L[,1]-min(L[,1]))/(max(L[,1])-min(L[,1]))*2-1
    L[,2]=(L[,2]-min(L[,2]))/(max(L[,2])-min(L[,2]))*2-1

    # Plot:
    plot(tmn,layout=L,vertex.size=0,vertex.frame.color="#00000000",vertex.label="")

    # Set images:
    apply(L,1,function(x)rasterImage(FR,x[1]-0.1,x[2]-0.1,x[1]+0.1,x[2]+0.1))

Тогда график выглядит так:

https://i.stack.imgur.com/quoYe.png

Итак, каждая вершина теперь представленаФлаг Франции, что не то, что я хочу, очевидно.

Буду очень признателен за совет.

...