使用ggplot的空间网络图

时间:2019-12-30 13:52:44

标签: r ggplot2 spatial

我想在library(tidyverse) new_df <- df %>% rownames_to_column(var = "row_name") %>% separate(row_name,sep = "_",into = c("name","year")) %>% mutate(year = year %>% str_remove(".txt")) new_df %>% as_tibble() # A tibble: 12 x 13 name year abs access allow analysis application approach base big business challenge company <chr> <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> 1 Adidas 2010 13 25 26 11 41 132 1 266 13 115 1 2 Adidas 2011 1 3 1 0 0 8 0 11 2 10 0 3 Adidas 2012 29 35 37 22 110 181 7 384 31 136 3 4 Adidas 2013 28 47 38 32 180 184 4 451 30 129 3 5 Adidas 2014 12 42 38 27 159 207 6 921 32 128 6 6 Adidas 2016 30 47 50 47 162 251 9 1061 32 171 13 7 Nike 2009 16 15 17 12 33 177 9 346 93 196 1 8 Nike 2011 10 30 0 3 0 0 0 81 7 31 0 9 Nike 2012 21 22 12 57 199 300 7 214 11 107 3 10 Nike 2013 20 32 30 11 123 321 4 331 90 239 3 11 Nike 2014 33 43 30 33 119 137 6 441 67 318 6 12 Nike 2015 51 42 41 27 102 151 9 1061 32 221 13 中复制区域的空间依赖性图,而不是在R中使用基本的ggplot2

我在下面的代码中提供了可重现的示例:

我遵循了示例:Plotting neighborhoods network to a ggplot maps

plot

我在问如何使用library(leaflet) library(ggplot2) library(sf) library(spdep) URL <- "https://biogeo.ucdavis.edu/data/gadm3.6/Rsp/gadm36_CZE_1_sp.rds" data <- readRDS(url(URL)) ggplot() + geom_polygon(data = data, aes(x=long, y = lat, group = group), color = "black", fill = F) cns <- knearneigh(coordinates(data), k = 3, longlat=T) scnsn <- knn2nb(cns, row.names = NULL, sym = T) cns scnsn cS <- nb2listw(scnsn) summary(cS) # Plot of regions and k-nn neighthorhours matrix plot(data) plot(cS, coordinates(data), add = T) 复制Plot of regions and k-nn neighthorhours matrix

我知道我们必须检索每个点输入,然后使用ggplot,但是我不知道如何从cS对象中检索它。

1 个答案:

答案 0 :(得分:3)

您要引用的另一篇SO帖子包含获取情节所需遵循的所有步骤(由于@StupidWolf给出了很好的答案)。

基本上,您需要使用以下方法提取不同的细分:

1)转换数据框中的数据坐标,这将便于以后使用:

data_df <- data.frame(coordinates(data))
colnames(data_df) <- c("long", "lat")

此data_df现在包含用于绘制点的所有x,y值。

2)现在,我们可以使用以下方法从cS对象中获取细分信息:

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, data_df[DA$from,], data_df[DA$to,])
colnames(DA)[4:7] = c("long","lat","long_to","lat_to")

DA数据框中,您具有绘制每个分段所需的所有信息

3)最后,您可以绘制每个部分的图:

ggplot(data, aes(x = long, y =lat))+
  geom_polygon(aes(group = group), color = "black", fill = FALSE)+
  geom_point(data = data_df, aes(x= long, y = lat), size = 1)+
  geom_segment(data = DA, aes(xend = long_to, yend = lat_to), size=0.5)

enter image description here

同样,@ StupidWolf提供的解决方案写得很好并且易于理解,所以我不知道为什么您无法复制它。