【问题标题】:Does the edge pair order (u,v) vs (v,u) matter when displaying graph in NetworkX?在 NetworkX 中显示图形时,边对顺序 (u,v) 与 (v,u) 是否重要?
【发布时间】:2017-02-24 00:46:41
【问题描述】:

我正在从 Matlab 获取环形网络的边缘列表。 NetworkX 然后读取此列表并以圆形布局绘制图形。我的边缘列表如下所示:

['1,2', '1,3', '1,49', '1,50', '2,3', '2,4', '2,50', '3,4', '3,5', '4,5', '4,6', '5,6', '5,7', '6,7', '6,8', '7,8', '7,9', '8,9', '8,10', '9,10', '9,11', '10,11', '10,12', '11,12', '11,13', '12,13', '12,14', '13,14', '13,15', '14,15', '14,16', '15,16', '15,17', '16,17', '16,18', '17,18', '17,19', '18,19', '18,20', '19,20', '19,21', '20,21', '20,22', '21,22', '21,23', '22,23', '22,24', '23,24', '23,25', '24,25', '24,26', '25,26', '25,27', '26,27', '26,28', '27,28', '27,29', '28,29', '28,30', '29,30', '29,31', '30,31', '30,32', '31,32', '31,33', '32,33', '32,34', '33,34', '33,35', '34,35', '34,36', '35,36', '35,37', '36,37', '36,38', '37,38', '37,39', '38,39', '38,40', '39,40', '39,41', '40,41', '40,42', '41,42', '41,43', '42,43', '42,44', '43,44', '43,45', '44,45', '44,46', '45,46', '45,47', '46,47', '46,48', '47,48', '47,49', '48,49', '48,50', '49,50']

请注意,有些对是 '1,50','2,50' 等等,而其余的对是按升序排列的,'1,2','1,3','4,5 ' 等等。虽然构造图形不是问题,但是当我将它绘制成圆形布局时,我得到了:

在右侧,圆圈以第 48 个节点结束,为了视觉一致性,应该以第 50 个节点结束。我怀疑的原因是有序对'1,50','2,50'等。这是绘图功能的基本功能,还是我可以做些什么,除了手动更改我的有序对?用于绘图的说明是:

f = open('Adj1.txt', 'r')
read_data = f.read()
f.close()
edge_list = read_data.split(sep='\n')
edge_list = edge_list[1:len(edge_list)-1]
H = nx.parse_edgelist(edge_list,delimiter=',')
....
nx.draw_circular(H,with_labels=False, node_size=25, node_color=node_color)

【问题讨论】:

    标签: python matplotlib networkx


    【解决方案1】:

    因为您的图是一个简单的无向图,所以重要的不是 (u,v) 的顺序,而是边列表的顺序。显然networkx 根据edge_list 中提到的顺序布置顶点(这在某种程度上是有道理的) 问题可以演示如下:如果网络节点50出现在列表的前面:

    import networkx as nx
    edge_list=['1,2', '1,3', '1,49', '1,50', '2,3', '2,4', '2,50', '3,4', '3,5', '4,5', '4,6', '5,6', '5,7', '6,7', '6,8', '7,8', '7,9', '8,9', '8,10', '9,10', '9,11', '10,11', '10,12', '11,12', '11,13', '12,13', '12,14', '13,14', '13,15', '14,15', '14,16', '15,16', '15,17', '16,17', '16,18', '17,18', '17,19', '18,19', '18,20', '19,20', '19,21', '20,21', '20,22', '21,22', '21,23', '22,23', '22,24', '23,24', '23,25', '24,25', '24,26', '25,26', '25,27', '26,27', '26,28', '27,28', '27,29', '28,29', '28,30', '29,30', '29,31', '30,31', '30,32', '31,32', '31,33', '32,33', '32,34', '33,34', '33,35', '34,35', '34,36', '35,36', '35,37', '36,37', '36,38', '37,38', '37,39', '38,39', '38,40', '39,40', '39,41', '40,41', '40,42', '41,42', '41,43', '42,43', '42,44', '43,44', '43,45', '44,45', '44,46', '45,46', '45,47', '46,47', '46,48', '47,48', '47,49', '48,49', '48,50', '49,50']
    H = nx.parse_edgelist(edge_list,delimiter=',')
    nx.draw_circular(H,with_labels=False, node_size=25)
    

    networkx 挣扎。但是,当我们将 1,50 和 consorts 放在列表的末尾(它们所属的位置!)时,它的绘图效果很好。

    edge_list=['1,2', '1,3',  '2,3', '2,4',  '3,4', '3,5', '4,5', '4,6', '5,6', '5,7', '6,7', '6,8', '7,8', '7,9', '8,9', '8,10', '9,10', '9,11', '10,11', '10,12', '11,12', '11,13', '12,13', '12,14', '13,14', '13,15', '14,15', '14,16', '15,16', '15,17', '16,17', '16,18', '17,18', '17,19', '18,19', '18,20', '19,20', '19,21', '20,21', '20,22', '21,22', '21,23', '22,23', '22,24', '23,24', '23,25', '24,25', '24,26', '25,26', '25,27', '26,27', '26,28', '27,28', '27,29', '28,29', '28,30', '29,30', '29,31', '30,31', '30,32', '31,32', '31,33', '32,33', '32,34', '33,34', '33,35', '34,35', '34,36', '35,36', '35,37', '36,37', '36,38', '37,38', '37,39', '38,39', '38,40', '39,40', '39,41', '40,41', '40,42', '41,42', '41,43', '42,43', '42,44', '43,44', '43,45', '44,45', '44,46', '45,46', '45,47', '46,47', '46,48', '47,48', '47,49', '48,49', '48,50', '49,50','1,49', '1,50','2,50',]
    H = nx.parse_edgelist(edge_list,delimiter=',')
    nx.draw_circular(H,with_labels=False, node_size=25)
    

    (u,v)(v,u) 的顺序确实如果您的图表是有向的。

    【讨论】:

    • 感谢您清除此问题!这意味着我必须更改我的 matlab 脚本以生成正确(必需)的边缘列表顺序。
    • 很高兴为您提供帮助。你可能比我更清楚。为图找到理想布局的问题并非易事。(对于理想的某些定义)正确吗?
    • 当您有要绑定的节点属性时,这当然不是微不足道的!这就是原因,我有时更喜欢为特定布局构建自己的小脚本。当然,它们看起来并不“专业”......但很好地达到了目的。
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多