Визуализация данных на географической карте с сетями (R)

Я пытаюсь изобразить сеть на географической карте, используя данные, содержащиеся в матрице культурных расстояний. Например.:

          AT      BE     CH     CZ
AT    0       0.00276 0.148  0.109
BE    0.00276 0       0.145  0.112
CH    0.148   0.145   0      0.257
CZ    0.109   0.112   0.257  0    

Начальная и конечная точки линий сети должны находиться в разных странах (т.е. здесь AT, BE, CH и CZ).

Линии следует изображать между странами, когда соответствующий элемент матрицы ниже определенного порога (например, среднего значения всех элементов матрицы). (Я предполагаю, что для фильтрации данных можно использовать пакет dplyr, как в примере http://www.gis-blog.com/flight-connection-map-with-r/)

Карта включает страны Евразии. Я использовал Trimble Data Marketplace, чтобы получить Shapefile и нарисовать географическую карту в R, как показано ниже:

введите здесь описание изображения

Эта карта получается с кодом:

> shapefile <- readOGR("directory_with_file", "name_of_file")
> shapefile_df <- fortify(shapefile)
> map <- ggplot() + geom_path(data = shapefile_df, aes(x = long, y = lat,
group = group),color = ‘black', size = .2)
> print(map)

Как я теперь могу нарисовать сеть на этой географической карте, используя данные матрицы?

(Сети будут отражать культурную близость стран и ее эволюцию во времени)


person Anastasia    schedule 23.03.2018    source источник


Ответы (1)


Вам нужно построить сеть для того, что вы ищете; координаты, которые я получил из пакета ggmap::geocode; После того, как у вас есть сеть, вы устанавливаете параметр «Граница» для представления значения культурной дистанции, которое у вас есть, поскольку оно изменяется от 0,002 до 0,2, вы должны увеличить его, иначе вы получите очень маленькие линии, этот код поможет вам получить на трассе надо просто добавить остальные культурные дистанции

library(maps)
library(igraph)

df<-data.frame(from = c("at", "be", "ch", "cz"), to= c("be", "ch", "cz", "at"), 
               weight=c(0.02,0.145,0.257,.109))
meta <- data.frame("name"=c("at", "be", "ch", "cz"), 
                   "lon"=c(14.55,4.46,8.227,14.4738),  
                   "lat"=c(47.51,50.5,46.818,50.0755))

g <- graph.data.frame(df, directed=F, vertices=meta)
E(g)$color <- "brown"
E(g)$width <- E(g)$weight*10
lo <- as.matrix(meta[,2:3])
map("world",  xlim = c(-8, 30),
    ylim = c(35, 55), asp=1)
plot(g, layout=lo, add = TRUE, rescale = FALSE)

введите здесь описание изображения

дополнительный совет: используйте + coord_equal() при построении карт в ggplot2

person Elio Diaz    schedule 23.03.2018