【问题标题】:Graph-tool vertex label with add_edges_from带有 add_edges_from 的图形工具顶点标签
【发布时间】:2021-11-20 16:55:36
【问题描述】:

我尽力在网上寻找解决方案,但似乎找不到适合我的graph_tool 网络的解决方案。我有一个熊猫数据框df,它有三列:id_sourceid_targetweightid_sourceid_target 包含文本形式的名称。我想将它们用作顶点标签。但是,当从 pandas 数据框中添加边时,我必须设置 hashed=True。然后代码看起来像这样

from graph_tool.all import *

g = Graph()
eweight = g.new_ep('double')
vmap = g.add_edge_list(df.values, eprops=[eweight], hashed=True)

我的目标是用顶点标签绘制这个小网络。当我不知道通过g.add_edge_list() 函数在图中引入每个新节点的顺序时,我被卡住了,无法弄清楚如何添加该顶点属性的解决方案。

我应该先添加顶点吗?然后在图上执行add_edge_list 函数。第二步会识别顶点名称(或标签)吗?

【问题讨论】:

  • 您使用什么库来制作图表?我需要查看Graph.add_edge_list 的文档才能给出明智的答案。
  • 没关系,我找到了。
  • @SteeleFarnsworth,我正在使用graph_tool 库。将编辑我的问题以使其更清楚。仅在标题中注明。

标签: pandas dataframe graph-tool


【解决方案1】:

来自Graph.add_edge_list 的文档:

将边列表添加到图中,由 edge_list 给出,它可以是 (source, target) 对的迭代器,其中源和目标都是顶点索引,或者形状为 (E,2) 的 numpy.ndarray,其中 E 是边数,每行指定一个(源,目标)对。如果列表引用了图中不存在的顶点,则会创建它们。

您已将df.values 传递给edge_list,它有三列(即形状为(E, 3)),但需要两列(形状为(E, 2))。

试试这个:

g.add_edge_list(df[['id_source', 'id_target']].to_numpy(), eprops=[eweight], hashed=True)

我怀疑eprops 应该是df['weight'],但我不确定。

【讨论】:

  • 嗨,斯蒂尔。 add_edge_list 函数自动将附加列检测为边缘属性 (eprops)。本质上,使用eprops = [eweight],我们告诉系统将边缘属性名称eweight 分配给第三列。我这里还需要添加一个顶点属性标签。
【解决方案2】:

答案在vmap。它一直都在那里。当您索引vmap 时,它将获取标签名称。

  • vmap[0] 将是记录的第一个顶点的标签。
  • vmap[1] 第二次等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2022-01-18
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多