Python 当节点是对象时在networkx图形中标记节点

Python 当节点是对象时在networkx图形中标记节点,python,networkx,Python,Networkx,使用networkx很容易标记图形的节点 import networkx as nx import matplotlib.pyplot as plt G1 = nx.Graph() a = "A" b = "B" G1.add_nodes_from([a, b]) G1.add_edge(a, b) nx.draw_networkx(G1) # default with_labels=True plt.show() 如果节点是对象而不是字符串,我理解创建一个额外的字典并将其用于节点标签,但

使用networkx很容易标记图形的节点

import networkx as nx
import matplotlib.pyplot as plt

G1 = nx.Graph()
a = "A"
b = "B"
G1.add_nodes_from([a, b])
G1.add_edge(a, b)
nx.draw_networkx(G1) # default with_labels=True
plt.show()

如果节点是对象而不是字符串,我理解创建一个额外的字典并将其用于节点标签,但是可以直接使用对象成员(
name
)作为标签吗

class Breakfast:
    def __init__(self, name):
        self.name = name

spam = Breakfast("Spam")
eggs = Breakfast("Eggs")
G2 = nx.Graph()
G2.add_nodes_from([spam, eggs])
G2.add_edge(spam, eggs)
nx.draw_networkx(G2, with_labels=True)
plt.show()

添加一个简单的
repr
方法似乎可以达到以下目的:

class Breakfast:
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return self.name

spam = Breakfast("Spam")
eggs = Breakfast("Eggs")
G2 = nx.Graph()
G2.add_nodes_from([spam, eggs])
G2.add_edge(spam, eggs)
nx.draw_networkx(G2, with_labels=True)
plt.show()

G2有什么问题?从([spam.name,eggs.name])G2添加节点?添加边缘(spam.name,eggs.name)?@MathBio问题是节点是字符串,而不是早餐对象,访问节点对象的其他属性需要设置额外的字典(并将名称限制为唯一).@Calaf可能会尝试增加节点大小。我建议使用
图形工具
,它使用cairo进行绘制。但我不明白,为什么我的回答不能回答你的问题?答案是肯定的。我希望您也知道节点形状问题的解决方案。:)我已经回答了一个类似的问题。我知道的唯一方法是实际查看源代码,并创建自己的matplotlib绘图函数。总的来说,如果您想绘制图形,我建议您不要使用matplotlib。可能是一些交互式JS的东西,比如如果同时使用
\uuuuu repr\uuuuu
\uuu str\uuuu
方法,networkx将使用
\uuu str\uuu
方法作为标签。