Ответ 1
Это уже было сказано. Посмотрите на эту запись в блоге, в которой описано, как построить такую карту очень осторожно.
http://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/
Я хочу писать электронную почту из и в мир. Например, я получил следующее количество писем из следующих стран, и я живу в США.
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)
Это то, что я пробовал, но я не знаю, как взаимодействовать с линиями:
require(fields)
world(xlim=c(-90,90),ylim=c(-180,180), xaxt = "s", yaxt = "s")
grid()
Ниже приведена моя модель гипотез:
Это уже было сказано. Посмотрите на эту запись в блоге, в которой описано, как построить такую карту очень осторожно.
http://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/
Основываясь на приведенной выше ссылке AdresT (спасибо!), я мог бы ответить на свой собственный вопрос за исключением того, что мышление линии пропорционально количеству писем
Вот код: Я использовал случайные данные без поиска точной долготы и широты для каждого местоположения.
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"])
}
Выходная карта:
Если кто-то может помочь толчке линии, пропорциональной количеству писем, будет здорово!
После исправления предложения линии от Романа Луштрика,
Размер строки до ширины может потребоваться переписать на меньшие номера!
Вот решение как сделать карты потока в R с помощью ggplot2
. Вы можете делать плоские или сферические карты: