2012-03-26 39 views
10

Tôi muốn vẽ mẫu email từ và đến thế giới. Ví dụ: tôi nhận được số lượng email sau từ các quốc gia sau và tôi sống ở Hoa Kỳ.vẽ sơ đồ lưu lượng email trong bản đồ bằng cách sử dụng 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) 

này những gì tôi đã cố gắng nhưng tôi không biết làm thế nào để conect với dòng:

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

Sau đây là mô hình giả định của tôi:

enter image description here

Trả lời

6

Dựa trên (! Thanks) liên kết AdresT cung cấp ở trên tôi có thể trả lời câu hỏi của riêng tôi trừ, dòng thinkness tỷ lệ thuận với số lượng email

Đây là mã: Tôi sử dụng dữ liệu ngẫu nhiên mà không cần tìm kiếm kinh độ và vĩ độ chính xác cho từng vị trí.

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

Sản lượng bản đồ: enter image description here

Nếu ai đó có thể giúp độ dày của dòng tương ứng với số lượng email sẽ là tuyệt vời!

Sau khi sửa chữa dòng sau kích thước gợi ý từ Roman Luštrik,

enter image description here

Dòng kích thước rộng có thể được cần phải reclass vào số nhỏ hơn!

+1

Nếu bạn thay đổi 'LWD = 1.2' cho 'LWD = mydf [i, "nGửi"]', nó giải quyết vấn đề độ dày đường của bạn? –

+0

có, cảm ơn, tôi đã kết hợp đề xuất – jon

+0

Bạn có thể rescale lwd hiện tại của bạn để một cái gì đó chức năng hơn. Bạn có thể chia cho 0.8 hoặc một cái gì đó cho hiệu ứng đó. –

Các vấn đề liên quan