r - 如何在 R 中的矢量图上绘制 igraph 对象

标签 r plot graph igraph

我使用 igraphsf 包。

我有一个 igraph 对象,其顶点具有空间坐标 geo_dist_graph。 顶点名称和坐标如下所示:

grid_grid <- 
structure(list(coords.x1 = c(15.504078, 15.704078, 15.904078, 
15.104078, 15.304078, 15.504078, 15.704078, 15.104078, 15.304078, 
15.704078, 14.904078, 14.304078, 13.904078, 14.704078, 13.704078, 
14.104078, 14.704078, 14.904078, 13.704078, 13.904078, 14.704078, 
13.704078, 13.904078, 14.304078), 
coords.x2 = c(43.835623, 43.835623, 
43.835623, 44.035623, 44.035623, 44.035623, 44.035623, 44.235623, 
44.235623, 44.235623, 44.435623, 44.635623, 44.835623, 44.835623, 
45.035623, 45.035623, 45.035623, 45.035623, 45.235623, 45.235623, 
45.235623, 45.435623, 45.435623, 45.435623), 
g9.nodes = c(27, 
28, 29, 40, 41, 42, 43, 55, 56, 58, 69, 81, 94, 98, 108, 110, 
113, 114, 123, 124, 128, 138, 139, 141)), 
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"
))

该图来自一个简单的平方邻接矩阵:

geo_dist_graph <- 
  structure(c(NA, 1, 1, NA, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, 
1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 1, 1, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 
NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 1, NA, 
1, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 1, 1, 1, NA, NA, 1, NA, NA, NA, 1, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 
NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 1, 1, 1, NA, 1, NA, 1, 1, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, 
1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 1, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, 1, 
NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 1, 1, NA, NA, NA, NA, 1, 1, NA, NA, 1, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, 
NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 1, 1, NA, 1, NA, NA, NA, NA, 1, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 1, 
NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, 1, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 
NA, 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 1, NA, 1, 1, NA, NA, 1, NA, NA, 1, 1, 1, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, 1, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, NA, 1, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 
1, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 1, NA, NA, NA, 1, NA, NA, 1, NA), 
.Dim = c(24L, 
24L))

colnames(geo_dist_graph) <- grid_grid$g9.nodes
row.names(geo_dist_graph) <- grid_grid$g9.nodes

geo_dist_graph <- graph_from_adjacency_matrix(geo_dist_graph, mode = "upper", diag = F)

这样连接的空间坐标:

V(geo_dist_graph)$x <- 
  grid_grid$coords.x1[match(V(geo_dist_graph)$name, grid_grid$g9.nodes)]

V(geo_dist_graph)$y <- 
  grid_grid$coords.x2[match(V(geo_dist_graph)$name, grid_grid$g9.nodes)]

当使用 plot 函数时,该图是在空间中正确绘制的。但是当我尝试添加像这样的 basemap 时 plot(map_crop_sp, add = T), map 并没有显示在图表后面,但没有错误消息。

map 是矢量图,不知道重要不重要。这是用于创建它的代码。

map <- st_read("ne_10m_coastline/ne_10m_coastline.shp")
map_crop <- st_crop(map, xmin = 13.304078, ymin = 43.635623, xmax = 16.503846, ymax = 45.60185)
map_crop_sp <- as(map_crop, Class = "Spatial")

最佳答案

回答

由于 igraph 应该在 map 的顶部,所以我将其绘制在第二位。我还添加了 rescale = F:

plot(map_crop_sp)
plot(geo_dist_graph, add = T, rescale = F)

enter image description here

基本原理

我输入了 ?plot.igraph。从那里,我找到了 ?igraph.plotting。似乎绘制一个 igraph 对象会重新缩放它(plot(..., rescale = TRUE):

Logical constant, whether to rescale the coordinates to the [-1,1]x-1,1 interval. This parameter is not implemented for tkplot.

Defaults to TRUE, the layout will be rescaled.

关于r - 如何在 R 中的矢量图上绘制 igraph 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67567550/

相关文章:

arrays - 对 3 维数组进行子集化时不要删除维度

javascript - 如何使用 Javascript 将数字数组绘制为图像?

java - 在 Java 中使用统一成本搜索的图形浏览

python - 在 R/Python 中为边缘节点三角形邻接矩阵创建共聚类

javascript - 如何根据值的变化修改D3js图表?

r - Highcharter map 点击事件在 Shiny 模块中不起作用

r - Plotly - 创建具有连续色阶的饼图

r - 找到生成默认选项的 ".Rprofile"文件

python - 设置步长极坐标图 matplotlib python

r - 如何为由三个子组组成的两个独立组添加图例标题?