如何解决NetworkX MultiDiGraph 不打印
我正在尝试按如下方式打印 NetworkX MultiDiGraph 的实例:
import networkx as nx
G = nx.MultiDiGraph()
G.add_node(0)
print(G)
我的理解是,由于 G
是一个类的实例,即使 __str__
没有实现,它也应该向字符串打印一些东西。但是,这只会打印一个空行。我还测试了这是否是一个 NoneType
对象:
isinstance(G,nx.MultiDiGraph)
这将返回 True
。这怎么可能?如果相关,我将此图传递给其他一些包,该包返回与 NoneType
输入相关的错误。在此先感谢您的帮助。
解决方法
Networkx 允许您为图形命名,这就是您在打印图形时获得的名称。例如:
import networkx as nx
G = nx.MultiDiGraph(name = 'myG')
G.add_node(0)
print(G)
> myG
名称默认为空字符串。这就是正在打印的内容。我认为从代码中看并不明显,但是在 this link 处,给出了 Graph
类的定义。其中,__str__
被定义为返回图形名称。图名称定义为
@property
def name(self):
"""String identifier of the graph.
This graph attribute appears in the attribute dict G.graph
keyed by the string `"name"`. as well as an attribute (technically
a property) `G.name`. This is entirely user controlled.
"""
return self.graph.get("name","")
所以默认名称是一个空字符串。现在您已经使用了 MultiDiGraph
,因此它被隐藏了 - MultiDiGraph
建立在 DiGraph
之上,而 Graph
建立在 MultiDiGraph
之上,因此隐藏在所有也就是说,如果 {
id: "123",name: "classroom A",students: [
{ id: "456"
name: Juanita,gender: female,ranks: [
{ id: "789",student_id: "456",name: "willingness to help others",rank: "4"
},{ id: "101",name: "Leadership",rank: "3"
} ...
]
},{ id: "232"
name: Billy,gender: male,student_id: "232",rank: "3"
},rank: "3"
} ...
]
}
]
}
没有指定名称,则默认为空字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。