使用网络 (R) 在地理地图上可视化数据
Visualizing data on geographic map with networks (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)
现在如何使用矩阵数据在这张地理地图上绘制网络?
(网络将代表国家的文化接近度及其随时间的演变)
你需要为你正在寻找的东西建立一个网络;我从 ggmap::geocode 包中获得的坐标;
一旦你有了网络,你就可以设置 "Edge" 参数来代表你的文化距离值,因为它从 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)
补充建议:在 ggplot2
中绘制地图时使用 + coord_equal()
我正在尝试使用文化距离矩阵中包含的数据在地理地图上描绘网络。例如:
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)
现在如何使用矩阵数据在这张地理地图上绘制网络?
(网络将代表国家的文化接近度及其随时间的演变)
你需要为你正在寻找的东西建立一个网络;我从 ggmap::geocode 包中获得的坐标; 一旦你有了网络,你就可以设置 "Edge" 参数来代表你的文化距离值,因为它从 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)
补充建议:在 ggplot2
中绘制地图时使用 + coord_equal()