首页 > 解决方案 > ipycytoscape 和 networkx 对象交换

问题描述

从 ipycytoscape 文档中,我可以看到以下内容:

import ipycytoscape as cs
from ipycytoscape import *
import networkx as nx


# === create custom node class (inherits from cytoscape node class)
class CustomNode(cs.Node):
    def __init__(self, name, classes=''):
        super().__init__()
        self.data['id'] = name
        self.classes = classes

n1 = CustomNode("node 1", classes='class1')
n2 = CustomNode("node 2", classes='class2')

# === create graph, add custom nodes and an edge
G = nx.Graph()

G.add_node(n1)
G.add_node(n2)
G.add_edge(n1, n2, directed=True)

我的问题是一个基本问题,而不是寻求代码方面的帮助。上面的 n1 和 n2 是使用从 ipycytoscape 类 CustomNode(cs.Node) 继承的类构建的。但是它们被添加为networkx图的节点!

这怎么可能?我的意思是将 ipycytoscape 对象添加到 networkx 对象中。

标签: pythongraphnetworkxipywidgetsipycytoscape

解决方案


来自:https ://networkx.org/documentation/stable/tutorial.html#what-to-use-as-nodes-and-edges

您可能会注意到节点和边未指定为 NetworkX 对象。这使您可以自由地将有意义的项目用作节点和边。最常见的选择是数字或字符串,但节点可以是任何可散列对象(None 除外),并且可以使用 G.add_edge(n1, n2, object=x) 将边与任何对象 x 关联。

所以这不是 ipycytoscape 特有的,您可以使用任何自定义对象作为 networkx 的节点。像这样:

import networkx as nx

class myClass:
    def __init__(self, something):
        self.something = something

n1 = myClass(53)
n2 = myClass("node 2")

# === create graph, add custom nodes and an edge
G = nx.Graph()

G.add_node(n1)
G.add_node(n2)
G.add_edge(n1, n2, directed=True)

从 ipycytoscape 节点对象继承只是为了使它更容易与 ipycytoscape 一起工作。


推荐阅读