将社区网络绘制成 ggplot 地图
Plotting neighborhoods network to a ggplot maps
如何将空间网络图插入 ggplot
library(rgeos)
library(rgdal)
library(dplyr)
require(maps)
require(viridis)
library(ggplot2)
library(spdep)
some.eu.countries <- c(
"Portugal", "Spain", "France", "Switzerland", "Germany",
"Austria", "Belgium", "UK", "Netherlands",
"Denmark", "Poland", "Italy",
"Croatia", "Slovenia", "Hungary", "Slovakia",
"Czech republic"
)
# Retrievethe map data
some.eu.maps <- map_data("world", region = some.eu.countries)
# Compute the centroid as the mean longitude and lattitude
region.lab.data <- some.eu.maps %>%
group_by(region) %>%
summarise(long = mean(long), lat = mean(lat))
cns <- knearneigh(cbind(region.lab.data$long, region.lab.data$lat), k=3, longlat=T)
scnsn <- knn2nb(cns, row.names = NULL, sym = T)
cns
scnsn
cS <- nb2listw(scnsn)
cS
summary(cS)
# Plotting neighbours network
plot(cS, cbind(region.lab.data$long, region.lab.data$lat))
# Now plotting countries
ggplot(some.eu.maps, aes(x = long, y = lat)) +
geom_polygon(aes( group = group, fill = region), colour = "black")+
geom_point(aes(region.lab.data$long, region.lab.data$lat), data = region.lab.data, size = 6)
我想将 #Plotting neighbours network
插入到 # Now plotting countries
换句话说,我想要一个国家的 ggplot 并在其中看到邻居网络。
我查看了 plot.nb,这是您的 nb2listw 输出的绘图方法,我认为它基本上为您的输入之间的所有连接做了一个分段。
# Now plotting countries
g = ggplot(some.eu.maps, aes(x = long, y = lat)) +
geom_polygon(aes( group = group, fill = region), colour = "black")+
geom_point(aes(region.lab.data$long, region.lab.data$lat), data = region.lab.data, size = 6)
# take out the connections from your nb object
# and assign them the lat and long in a dataframe
n = length(attributes(cS$neighbours)$region.id)
DA = data.frame(
from = rep(1:n,sapply(cS$neighbours,length)),
to = unlist(cS$neighbours),
weight = unlist(cS$weights)
)
DA = cbind(DA,region.lab.data[DA$from,2:3],region.lab.data[DA$to,2:3])
colnames(DA)[4:7] = c("long","lat","long_to","lat_to")
#plot it using geom_segment
g + geom_segment(data=DA,aes(xend=long_to,yend=lat_to),size=0.3,alpha=0.5)
这是我得到的(警告,我不知道如何处理权重):
如何将空间网络图插入 ggplot
library(rgeos)
library(rgdal)
library(dplyr)
require(maps)
require(viridis)
library(ggplot2)
library(spdep)
some.eu.countries <- c(
"Portugal", "Spain", "France", "Switzerland", "Germany",
"Austria", "Belgium", "UK", "Netherlands",
"Denmark", "Poland", "Italy",
"Croatia", "Slovenia", "Hungary", "Slovakia",
"Czech republic"
)
# Retrievethe map data
some.eu.maps <- map_data("world", region = some.eu.countries)
# Compute the centroid as the mean longitude and lattitude
region.lab.data <- some.eu.maps %>%
group_by(region) %>%
summarise(long = mean(long), lat = mean(lat))
cns <- knearneigh(cbind(region.lab.data$long, region.lab.data$lat), k=3, longlat=T)
scnsn <- knn2nb(cns, row.names = NULL, sym = T)
cns
scnsn
cS <- nb2listw(scnsn)
cS
summary(cS)
# Plotting neighbours network
plot(cS, cbind(region.lab.data$long, region.lab.data$lat))
# Now plotting countries
ggplot(some.eu.maps, aes(x = long, y = lat)) +
geom_polygon(aes( group = group, fill = region), colour = "black")+
geom_point(aes(region.lab.data$long, region.lab.data$lat), data = region.lab.data, size = 6)
我想将 #Plotting neighbours network
插入到 # Now plotting countries
换句话说,我想要一个国家的 ggplot 并在其中看到邻居网络。
我查看了 plot.nb,这是您的 nb2listw 输出的绘图方法,我认为它基本上为您的输入之间的所有连接做了一个分段。
# Now plotting countries
g = ggplot(some.eu.maps, aes(x = long, y = lat)) +
geom_polygon(aes( group = group, fill = region), colour = "black")+
geom_point(aes(region.lab.data$long, region.lab.data$lat), data = region.lab.data, size = 6)
# take out the connections from your nb object
# and assign them the lat and long in a dataframe
n = length(attributes(cS$neighbours)$region.id)
DA = data.frame(
from = rep(1:n,sapply(cS$neighbours,length)),
to = unlist(cS$neighbours),
weight = unlist(cS$weights)
)
DA = cbind(DA,region.lab.data[DA$from,2:3],region.lab.data[DA$to,2:3])
colnames(DA)[4:7] = c("long","lat","long_to","lat_to")
#plot it using geom_segment
g + geom_segment(data=DA,aes(xend=long_to,yend=lat_to),size=0.3,alpha=0.5)
这是我得到的(警告,我不知道如何处理权重):