J'ai des données sur les flux de navetteurs du recensement de 2001. Je l'ai converti de "plat" à "long" forme en utilisant melt
du paquet R reshape2
et placé origines et destinations dans la même ligne parce que ggplot2 accepte seulement les entrées de trame de données. Mon problème est que j'ai fini par doubler les données pour chaque ligne, de sorte que chaque ligne (ligne) a une origine et une destination. Je suis sûr qu'il existe une solution plus concise, impliquant probablement une forme encore plus longue de mes données.Comment dessiner des flux dans ggplot2 en fonction d'une matrice de flux
Pour le problème spécifique, j'ai produit un petit exemple détaillé de Hereford:
# prepare data + packages
library(ggplot2)
library(ggmap)
flows.mini <- flows.ft[1:100,]
save(flows.mini, file="flows.mini.RData")
load("flows.mini.RData")
head(flows.mini)
variable X.1 value X1.x X2.x X1.y X2.y n nr
1 00GANY 00GANY 605 -2.699389 52.06554 -2.699389 52.06554 605 1
2 00GANY 00GAPA 135 -2.742064 52.04099 -2.699389 52.06554 135 2
3 00GANY 00GAQD 25 -2.733890 51.93402 -2.699389 52.06554 25 3
fcols
1 500+
2 100-500
3 10-100
Pour reproduire les mesures prises par les deux dernières lignes, s'il vous plaît télécharger le fichier RDATA (2 kb): http://dl.dropbox.com/u/15008199/flows.mini.RData et reproduire le terrain:
Voilà comment je l'ai tracé obtenu:
# plot flows by doubling-up
hford <- qmap("hereford", source = "stamen", maptype = "toner", extent = "normal", maprange=FALSE)
hford + geom_path(data= flows.mini, aes(x=c(X1.x,X1.y), y=c(X2.x, X2.y),
group = c(nr, nr), color = c(fcols,fcols), size= c(n,n)),
lineend = "round") +
scale_size_continuous(range = c(0.05,5)) +
scale_color_discrete(breaks = c("0-10", "10-100", "100-500", "500+")) +
coord_map()
Je pense que vous serez d'accord que les doubles attributs sont inefficaces, donc, pour reformuler ma question: comment puis-je les supprimer?
Pourquoi utilisez-vous 'geom_path'? Vos différentes lignes sont-elles connectées les unes aux autres? – juba
Aucune raison; geom_lines semble produire le même résultat. J'ai essayé les deux et ne peut voir aucune différence entre les deux dans ce cas ... – RobinLovelace