2012-03-26 9 views
10

Quiero trazar el correo electrónico desde y hacia en el mundo. Por ejemplo, he recibido el siguiente número de mensajes de correo electrónico de los siguientes países y vivo en EE.UU..diagramando el flujo de correo electrónico en el mapa usando R

recievedcountry <- c("India", "China", "France", "Chile", "Australia", "Chad", 
        "Nepal", "Burma") 
rfrequency <- c(12, 20, 5, 2, 12, 1, 3, 2) # frequency of emails 
sendcountry <- c("Canda", "USA", "France", "India", "China", "Japan") 
sfrequency <- c(14, 108, 12, 15, 18, 4) 

Esto lo he intentado pero no saber enlazar con las líneas:

require(fields) 
world(xlim=c(-90,90),ylim=c(-180,180), xaxt = "s", yaxt = "s") 
grid() 

La siguiente es mi modelo hipotetizar:

enter image description here

Respuesta

6

Basado en AdresT enlace proporcionada anteriormente que pudiera responder a mi propia pregunta excepción, la línea thinkness proporcional al número de correos electrónicos

Aquí es código: He utilizado datos aleatorios sin buscar longitud y latitud exactas para cada ubicación.

library(maps) 
library(geosphere) 
map("world", col = "green4", bg="#F5FFFA", lwd=0.05) 
myposition <- c(-74, 40) # my position (where I am opening emails) 

rlong <- c(75, 105, 135, - 10.2, 45.2, -30.4, 105, 35, -150, 
    10.2, 145.2, 30.4) # received lat 
rlat <- c(30, 43, 23, 12, 68, 55.6, 30, 43, 23, 12, 68, 55.6) # received long 
nrecived <- c(4, 10, 5, 2, 4, 10, 4, 10, 5, 2, 4, 10)  # number of email received 
slong <- c(85, 85, 55, -40.2, 45.2, -30.4,45, 95, 55, 40.2, 55.2, 60.4) # send lat 
slat <- c(10, 43, 13, 12, 68, 55.6,10, 43, 13, 12, 68, 55.6) # send long 
nsend <- c(4, 10, 5, 2, 4, 10, 4, 10, 5, 2, 4, 10)  # number of email send 

mydf <- data.frame (rlat, rlong, nrecived, slat, slong, nsend) 

for (i in 1: length (mydf)) { 
      send <- gcIntermediate(c(mydf[i,]$slong, mydf[i,]$slat), c(-74, 40), 
        n=100, addStartEnd=TRUE) 
      lines (send, col = "blue", lwd = mydf[i, "nsend"]) # edited 
                   following suggestion 
      received <- gcIntermediate(c(mydf[i,]$rlong, mydf[i,]$rlat), c(-74, 40), 
      n=100, addStartEnd=TRUE) 
      lines (received , col = "red", lwd = mydf[i, "nrecived"]) 
      } 

El mapa de salida: enter image description here

Si alguien puede ayudar a grosor de línea proporcional al número de correos electrónicos será grande! tamaño

Después de fijar siguiente línea sugerencia de tamaño desde Luštrik romana,

enter image description here

Línea de amplio puede ser necesidad de reclasificar en números más pequeños!

+1

Si cambia 'lwd = 1.2' a' lwd = mydf [i, "nEnviar"] ', soluciona el problema línea de espesor? –

+0

sí, gracias, ya incorporé la sugerencia – jon

+0

Puede cambiar la escala de su lwd actual a algo más funcional. Puedes dividir por 0.8 o algo para ese efecto. –

Cuestiones relacionadas