You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言移动网络叠加空间地图时ggraph手动布局函数报错求助

问题背景

为实现移动网络与空间地图的叠加可视化,借助igraph、ggraph、ggplot2等工具包自定义布局,将地理坐标设置为节点位置。相关代码此前可正常运行,更新包后出现报错,无法定位问题原因。

相关代码

igraph图对象g定义

g<-structure(list(32, FALSE, c(1, 4, 5, 6, 7, 8, 9, 10, 11, 13, 
14, 15, 18, 19, 20, 22, 25, 27, 28, 31, 4, 6, 7, 9, 18, 22, 6, 
7, 9, 13, 14, 18, 27, 9, 18, 7, 8, 9, 18, 22, 27, 9, 18, 10, 
17, 18, 22, 27, 18, 18, 22, 18, 22, 27, 27), c(0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 
4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 
9, 10, 13, 13, 14, 18, 18, 22), c(0, 1, 20, 2, 3, 21, 26, 4, 
22, 27, 35, 5, 36, 6, 23, 28, 33, 37, 41, 7, 43, 8, 9, 29, 10, 
30, 11, 44, 12, 24, 31, 34, 38, 42, 45, 48, 49, 51, 13, 14, 15, 
25, 39, 46, 50, 52, 16, 17, 32, 40, 47, 53, 54, 18, 19), c(0, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 
35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 
51, 52, 53, 54), c(0, 0, 1, 1, 1, 3, 4, 7, 11, 13, 19, 21, 22, 
22, 24, 26, 27, 27, 28, 38, 39, 40, 40, 46, 46, 46, 47, 47, 53, 
54, 54, 54, 55), c(0, 20, 26, 26, 26, 33, 35, 36, 41, 43, 48, 
49, 49, 49, 51, 52, 52, 52, 52, 54, 54, 54, 54, 55, 55, 55, 55, 
55, 55, 55, 55, 55, 55), list(c(1, 0, 1), structure(list(), .Names = character(0)), 
    list(name = 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", "25", "26", "27", "28", "29", 
    "30", "31", "32"), long = c(-79.260866474359, -80.0214733333333, 
    -76.7089527272727, -74.780105, -80.2763261538462, -80.46082, 
    -80.030754125, -80.121487, -82.1419016578947, -81.41021461, 
    -85.6918532152941, -81.2031545454546, -81.187526, -80.11719, 
    -80.5063443067816, -82.5245573333333, -78.8618875, -80.883413, 
    -79.7296606, -76.9488, -77.8201766666667, -76.5490625, -81.5434341458974, 
    -93.59755, -88.035675, -83.2922209874074, -84.5110066666667, 
    -79.1122080625, -80.173172, -77.3383016666667, -78.2188216666667, 
    -77.7654788888889), lat = c(25.7205797179487, 26.85296, 25.53793, 
    38.33654, 27.1842307692308, 24.948536, 26.99901625, 27.171273, 
    28.2081715526316, 24.6188354115741, 29.4212288229412, 31.0068890909091, 
    29.643964, 26.6099285714286, 28.4826687301149, 27.100245, 
    26.63643, 31.3834996666667, 32.6213106, 34.2073, 24.8982166666667, 
    24.3104225, 24.6719581623077, 27.90902, 30.0528425, 27.764016172963, 
    29.706515, 26.97782228125, 25.5103912857143, 34.55239, 26.6567083333333, 
    26.9487844444444)), list(weight = c(426, 58, 3, 253, 493, 
    9, 392, 7, 4, 42, 5, 2, 40, 1, 2, 74, 2, 106, 17, 1, 2, 114, 
    62, 9, 1, 1, 1, 5, 3, 12, 1, 9, 1, 2, 1, 1, 1, 15, 6, 2, 
    17, 4, 1, 1, 1, 21, 4, 4, 1, 1, 1, 1, 2, 1, 2))), <environment>), class = "igraph")

节点位置数据定义

nodes_pos<-structure(list(x = c(-79.260866474359, -80.0214733333333, -76.7089527272727, 
                     -74.780105, -80.2763261538462, -80.46082, -80.030754125, -80.121487, 
                     -82.1419016578947, -81.41021461, -85.6918532152941, -81.2031545454546, 
                     -81.187526, -80.11719, -80.5063443067816, -82.5245573333333, 
                     -78.8618875, -80.883413, -79.7296606, -76.9488, -77.8201766666667, 
                     -76.5490625, -81.5434341458974, -93.59755, -88.035675, -83.2922209874074, 
                     -84.5110066666667, -79.1122080625, -80.173172, -77.3383016666667, 
                     -78.2188216666667, -77.7654788888889), y = c(25.7205797179487, 
                                                                  26.85296, 25.53793, 38.33654, 27.1842307692308, 24.948536, 26.99901625, 
                                                                  27.171273, 28.2081715526316, 24.6188354115741, 29.4212288229412, 
                                                                  31.0068890909091, 29.643964, 26.6099285714286, 28.4826687301149, 
                                                                  27.100245, 26.63643, 31.3834996666667, 32.6213106, 34.2073, 24.8982166666667, 
                                                                  24.3104225, 24.6719581623077, 27.90902, 30.0528425, 27.764016172963, 
                                                                  29.706515, 26.97782228125, 25.5103912857143, 34.55239, 26.6567083333333, 
                                                                  26.9487844444444)), row.names = 1:32, class = "data.frame")

报错版手动布局创建代码

lay <- create_layout(graph = g, layout = "manual",
                               node.positions = nodes_pos)

报错信息

Error in layout_fun(graph, circular = circular, ...) : 
 unused argument (node.positions = nodes_pos)

运行环境

  • ggraph 2.0.2
  • igraph 1.2.4.2
  • R 3.6.2

解决方案

报错原因是ggraph 2.0.0及后续版本对手动布局的接口做了不兼容更新,移除了原有的node.positions参数,调整为使用positions参数直接传入坐标数据,或者直接指定节点的x/y属性字段。

修复后可运行代码

方案1:直接传入已有的坐标数据框

lay <- create_layout(graph = g, layout = "manual",
                     positions = nodes_pos)

方案2:直接调用igraph对象内存储的经纬度属性(无需额外定义nodes_pos)

你的igraph对象已经提前存储了long(经度)和lat(纬度)节点属性,可以直接调用,写法更简洁:

lay <- create_layout(graph = g, layout = "manual",
                     x = long, y = lat)

修改后即可正常生成自定义布局,后续绘图逻辑不需要调整。


内容的提问来源于stack exchange,提问作者FlyingDutch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:18:03