W pakiecie igraph R, staram się wykreślić sieć społeczną za pomocą współrzędnych szerokości/długości geograficznej jako układu wykresu.Używanie współrzędnych geograficznych jako współrzędnych wierzchołków w pakiecie igraph r
Wyobraźmy sobie ten prosty przykład: sieć z 4 węzłów, z których znane jest położenie geograficzne oraz połączeń:
df<-data.frame("from" = c("Bob", "Klaus", "Edith", "Liu"), "to"= c("Edith", "Edith", "Bob", "Klaus"))
Tutaj masz meta-dane dla węzłów, tak że Bob mieszka w Nowym Jorku, Klaus w Berlinie, w Paryżu i Edith Liu w Pekinie:
meta <- data.frame("name"=c("Bob", "Klaus", "Edith", "Liu"), "lon"=c(-74.00714, 13.37699, 2.34120, 116.40708), "lat"=c(40.71455, 52.51607, 48.85693, 39.90469))
Wykonujemy g przedmiotem igraph ...
g <- graph.data.frame(df, directed=T, vertices=meta)
... i definiujemy jako nasz układ współrzędnych długość/szerokość
lo <- layout.norm(as.matrix(meta[,2:3]))
plot.igraph(g, layout=lo)
Jeżeli Państwo uruchomić ten przykład z tych (Real) współrzędnych geograficznych, zobaczysz, że jest „względnie” dokładne w poczucie, że lokalizacje są względem siebie właściwe. Jeśli jednak wykreślę wiele współrzędnych takich jak ta, mapa kartezjańska świata wygląda "rozciągnięta".
Czy istnieje sposób, w jaki mogę naprawdę wykreślić moje węzły na mapie świata, tak aby współrzędne były w 100% poprawne i mogę zobaczyć połączenia między moimi węzłami? Naprawdę chcę nadal używać pakietu igraph, ponieważ oferuje wiele funkcji, które mogą być potrzebne później, gdy chcę analizować połączenia między węzłami.
Czy rozważałeś wykonanie ramki danych z węzłów igraph, a następnie narysowanie ich na mapie za pomocą podsystemu ggplot? – hrbrmstr
Zgodnie z sugestią @ hrbrmstr, tworzy to mapę świata, ale nakładanie się lub integrowanie krawędzi i zdolności do rysowania jest poza mną. wymagają (mapy) kraje <- map_data ("świat") kraje <- podzbiór (kraje, region! = "Antarktyda") ggplot (meta, aes (x = lon, y = lat)) + geom_point (kształt = 22, wypełnienie = "czerwony", rozmiar = 6) + geom_polygon (dane = kraje, aes (x = długi, y = lat, grupa = grupa), col = "grey30", wypełnienie = "przezroczysty", lwd = 0) – lawyeR
Musisz wywołać tutaj 'igraph :: plot()' z parametrem 'rescale = FALSE', w przeciwnym razie przeskaluje współrzędne wzdłuż obu wymiarów na' [-1; 1] 'interval. – deeenes