python - 创建一个不同节点具有相同标签的图?
问题描述
让我们看一个基本图networkx
:
import networkx as nx
G = nx.Graph()
G.add_node("A")
G.add_node("B")
G.add_edge("A","B")
将其导出为gml
产量:
graph [
node [
id 0
label "A"
]
node [
id 1
label "B"
]
edge [
source 0
target 1
]
]
现在我想知道是否有办法让两个不同的节点具有相同的名称,这样我的 gml 文件看起来像这样:
graph [
node [
id 0
label "A"
]
node [
id 1
label "A"
]
edge [
source 0
target 1
]
]
至少在文件中,id 编号是不同的,因此即使具有相同的名称,节点也是唯一标识的。这个文件可以用 yEd 打开,没有任何问题。
从语法来看,我认为这是不可能的networkx
,那么还有什么其他方法可以做到这一点?
背景:
我有一个有向图,其中两个节点都有相同的后继节点X
,但我希望每个节点都有自己的节点,而不是都指向同一个节点。基本上我想要一个有向树,其中每个节点只有一个前任,而树中允许重复。Y
Z
X
Y
Z
Z
解决方案
是的,这是可能的。您需要定义自己的函数,该函数将节点作为输入并将其标签作为字符串输出。这有点小技巧,因为该函数的真正目的是在节点没有自动转换为字符串的标签的情况下创建用作标签的字符串。但它有效。
import networkx as nx
G = nx.Graph()
G.add_edge('a', 'b')
G.add_edge('b','c')
def stringizer(x): #replaces both 'a' and 'b' with 'a'
if x == 'a':
return 'a'
elif x == 'b':
return 'a'
else:
return x
nx.write_gml(G, path='tmp.gml', stringizer=stringizer)
输出为节点“a”和“b”提供标签“a”。
graph [
node [
id 0
label "a"
]
node [
id 1
label "a"
]
node [
id 2
label "c"
]
edge [
source 0
target 1
]
edge [
source 1
target 2
]
]
在实践中做到这一点的一种方法是创建一个D[node]
提供标签的字典,然后定义
def stringizer(node):
return D[node]
推荐阅读
- sql - 如何使用 postgresql 中的 group by 子句获取关联表列的值?
- php - symfony 在不同的网站生成 CSRF 代码进行登录?
- azure - 如何为 Azure 容器实例配置静态出站 IP
- python - 如果用户没有{username}电报bot python,如何存储用户{name}
- ltk - LLRP IMPINJ LTK 如何设置载波发射频率
- raspberry-pi4 - Raspberry pi - chmod 等权限后黑屏
- r - R ggplot,循环内有变量
- azure-devops - 如何在 azure 管道中参数化 azure agent.name?
- mysql - InfoSchema 用户丢失
- android - 在 org.gradle.api.Project 类型的项目 ':app' 上找不到参数 [androidx.appcompat:appcompat:1.3.1] 的方法 implementation()