2015-10-14 9 views
6

Ich möchte eine Welt-Netzwerkkarte in R ähnlich the one below from this page erstellen.R: Erstellen einer Welt-Netzwerkkarte

enter image description here

Ich habe für ein R-Paket suchen, der mir dies tun können, aber ich habe nicht in der Lage gewesen, einen zu finden. Es gibt D3 JavaScript Network Graphs from R, aber ich konnte kein World-Network-Map-Beispiel finden.
Wie kann ich etwas ähnliches in R erstellen?

+0

Dieser Beitrag von vorhin tut etwas ähnliches: http://Stackoverflow.com/a/19695755/1718356 – Andy

+0

Wo wäre der beste Ort, um Hilfe zu diesem Thema zu posten? –

Antwort

3

Nun, FWIW: hier eine schnelle & schmutzige Art und Weise ist die Kanten zwischen den Scheitelpunkten mit Pfeilen plotten Eckpunkte („Stadt“) auf der Karte und verbinden:

library(maps) 
library(diagram) 
library(plotrix) 
palette(rainbow(20)) 
data("world.cities") 

pdf(tf <- tempfile(fileext = ".pdf"), width = 40, height = 20) 

map('world', fill = TRUE, col = "lightgray", mar = rep(0, 4)) 

nodes <- transform(with(world.cities, world.cities[pop > 5e6,]), country.etc = as.factor(country.etc)) 
with(nodes, points(long, lat, col=country.etc, pch=19, cex=rescale(pop, c(1, 8)))) 

set.seed(1) 
edges <- subset(data.frame(from = sample(nodes$name, 20, replace = TRUE), to = sample(nodes$name, 20, replace = TRUE), stringsAsFactors = F), from != to) 
edges <- merge(merge(edges, nodes[, c("name", "long", "lat")], by.x = "from", by.y = "name"), nodes[, c("name", "long", "lat")], by.x = "to", by.y = "name") 
edges$col <- as.integer(nodes$country.etc[match(edges$from, nodes$name)]) 

apply(edges[, -(1:2)], 1, function(x) curvedarrow(to=x[3:4], from=x[1:2], lcol=x[5], curve=.1, arr.pos = 1, lwd=.5)) 

dev.off()   
shell.exec(tf) 

enter image description here

3

Hier ist eine Lösung mit dem geosphere und maps Paket. Mit der Funktion gcIntermediate können Sie "Zwischenpunkte auf einem großen Kreis zwischen den beiden Punkten definieren, die zum Definieren des Großkreises verwendet werden."

Hier ist ein Beispiel Flug conncetions vom JKF Flughafen (Beispieldaten aus dem nycflights13 Paket gefiltert mit dplyr) zeigt: auf Grundlage ist ein Tutorial geschrieben

library(maps) 
library(geosphere) 
library(dplyr) 
library(nycflights13) 


usairports <- filter(airports, lat < 48.5) 
usairports <- filter(usairports, lon > -130) 
usairports <- filter(usairports, faa!="JFK") 
jfk <- filter(airports, faa=="JFK") 

map("world", regions=c("usa"), fill=T, col="grey8", bg="grey15", ylim=c(21.0,50.0), xlim=c(-130.0,-65.0)) 


for (i in (1:dim(usairports)[1])) { 

inter <- gcIntermediate(c(jfk$lon[1], jfk$lat[1]), c(usairports$lon[i], usairports$lat[i]), n=200) 

lines(inter, lwd=0.1, col="turquoise2")  
} 

points(usairports$lon,usairports$lat, pch=3, cex=0.1, col="chocolate1") 

enter image description here

mein blog.

Verwandte Themen