gpt4 book ai didi

python - Networkx 和 graphviz 布局将节点放置在同一位置

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:26 25 4
gpt4 key购买 nike

我正在使用 networkx 库来处理图形,并使用 matplotlib 进行可视化。

我遇到的问题是节点被放置在彼此之上。我正在为节点使用我自己的类 - 这里显示的是一个简化的、可运行的版本:

import matplotlib
matplotlib.use('TKAgg')
import matplotlib.pyplot as plt
import networkx as nx

class MyCustomNode(object):
def __init__(self, value):
self.value = value

def __str__(self):
return "val: " + self.value


graph = nx.Graph()
graph.add_edge(MyCustomNode('a'), MyCustomNode('b'))

labels = {}
for node in graph.nodes():
labels[node] = str(node)

pos = nx.graphviz_layout(graph)
nx.draw(graph, pos, node_color='red', node_size=3000)
nx.draw_networkx_labels(graph, pos, labels, font_size=8, font_color='white')
plt.show()

This is what displays with the code above

我发现该行为似乎与 __str__ 方法中返回的内容类似。如果我将 __str__ 方法更改为开始是唯一的,它就会按预期布局:

def __str__(self):
return self.value

enter image description here

无法判断这是否是预期的行为,或者我做错了什么,或者这是一个错误。感谢建议! :)

最佳答案

虽然我目前找不到权威的引用资料,但情况如下:

Graphviz 对节点名称中可以出现的字符有一些限制。它无法处理的字符包括 :。因此,当所有内容都传递给 graphviz 时,我相信它会将其解释为名称为 val 的单个节点(我可能是错的)。

然后,当 networkx 从 graphviz 获取位置时,所有节点都被放置在同一个位置。

所以最简单的选择是删除冒号。

关于python - Networkx 和 graphviz 布局将节点放置在同一位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32880235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com