2012-03-26 12 views
10

Chcę kreślić e-maile z i do świata. Na przykład otrzymałem następującą liczbę e-maili z następujących krajów i mieszkam w USA.kreślenie przepływu wiadomości e-mail na mapie przy użyciu 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) 

To co próbowałem, ale nie wiem jak conect z linii:

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

Poniżej mój model hipotezę:

enter image description here

Odpowiedz

6

podstawie AdresT (! Dzięki) link podany powyżej mogę odpowiedzieć na moje własne pytanie wyjątkiem, linia thinkness proporcjonalna do liczby e-maili

Oto kod: Kiedyś dane losowe bez wyszukiwania dokładnej długości i szerokości geograficznej dla każdej lokalizacji.

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"]) 
      } 

Mapa wyjściowa: enter image description here

Jeśli ktoś może pomóc w grubości linii proporcjonalnej do liczby e-maili będzie wielki! Wielkość

Po zamocowaniu następujący wiersz rozmiarze sugestię Roman Luštrik,

enter image description here

Linia Broad może być konieczne Reclass na mniejsze numery!

+1

Jeżeli zmienisz LWD '' = 1.2' do LWD = mydf [i "nWysyla"] ', czy to rozwiąże problem, grubość linii? –

+0

Tak, dziękuję, dodałem już propozycję – jon

+0

Możesz zmienić swój bieżący plik LWD na coś bardziej funkcjonalnego. Możesz podzielić przez 0,8 lub coś podobnego. –

Powiązane problemy