【问题标题】:Networkx: Importing graph with node values and edges informationNetworkx:使用节点值和边信息导入图
【发布时间】:2012-01-13 01:13:33
【问题描述】:

我正在使用 networkx 生成随机几何图形。我正在将所有节点和边信息导出到文件中。 我想通过从文件中导入所有节点和边信息来生成相同的图。

导出节点值和边信息的代码。

G=nx.random_geometric_graph(10,0.5) 
filename = "ipRandomGrid.txt" 
fh=open(filename,'wb') 
nx.write_adjlist(G, fh) 
nx.draw(G) 
plt.show()

我正在尝试使用以下代码导出它并尝试更改某些节点的颜色。但它正在生成不同的图表。

filename = "ipRandomGrid.txt" 
fh=open(filename, 'rb') 
G=nx.Graph() 
G=nx.read_adjlist("ipRandomGrid.txt") 
pos=nx.random_layout(G) 
nx.draw_networkx_nodes(G,pos,nodelist=['1','2'],node_color='b') 
nx.draw(G) 
plt.show()

如何生成一些节点颜色变化不大的同一张图?

【问题讨论】:

  • “不同的图表”是什么意思?请使用显示您想到的差异的代码,而不是任意种类的图形操作。特别是,图表的不同随机布局不会显示出有意义的差异。
  • 它在图中的随机位置生成 2 个额外的节点 1 和 2。这个想法是让相同的图形具有相同的位置,而节点颜色的变化很少。
  • 图表没有位置。那你说的是布局?
  • 是的,我正在寻找相同的布局。
  • 我已经根据我猜你的意思回答了。请编辑您的问题,使其更好地反映您的需求——从问题中很难看出。

标签: networkx


【解决方案1】:

如果我正确理解您遇到的问题,那么问题就在这里:

pos=nx.random_layout(G) 
nx.draw_networkx_nodes(G,pos,nodelist=['1','2'],node_color='b') 
nx.draw(G) 

您在第一行创建图形的随机布局,并使用它在第二行绘制节点'1''2'。然后在第三行中再次绘制图形而不指定位置,它使用弹簧模型来定位节点。

您的图表没有额外的节点,您只是在两个不同的位置绘制了其中的两个。如果要始终以相同的方式绘制图形,则需要始终使用您计算的pos。如果您希望在存储和重新加载后保持相同,则同时保存pos

【讨论】:

    【解决方案2】:

    为您的案例存储节点位置数据的最简单方法可能是使用 Python pickles。 NetworkX 有一个 write_gpickle() 函数可以为你做这件事。请注意,当您生成随机几何图形时,这些位置已经作为节点属性可用,因此您可能希望在绘图时使用它们。这是一个如何生成、保存、加载和绘制相同图形的示例。

    In [1]: import networkx as nx
    
    In [2]: G=nx.random_geometric_graph(10,0.5)
    
    In [3]: pos = nx.get_node_attributes(G,'pos')
    
    In [4]: nx.draw(G,pos)
    
    In [5]: nx.write_gpickle(G,'rgg.gpl')
    
    In [6]: H=nx.read_gpickle('rgg.gpl')
    
    In [7]: pos = nx.get_node_attributes(H,'pos')
    
    In [8]: nx.draw(H,pos)
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 2021-01-02
      • 2021-09-30
      • 2019-03-28
      相关资源
      最近更新 更多