我想创建一个图表并绘制它,到目前为止一切都很好,但问题是我想在每个节点上绘制更多信息。我看到我可以将属性保存到节点\边缘,但是如何绘制属性?我正在使用 PyGraphviz,女巫使用 Graphviz。
问问题
3602 次
3 回答
4
一个例子是
import pygraphviz as pgv
from pygraphviz import *
G=pgv.AGraph()
ndlist = [1,2,3]
for node in ndlist:
label = "Label #" + str(node)
G.add_node(node, label=label)
G.layout()
G.draw('example.png', format='png')
但请确保您明确添加label
额外信息的属性以显示如 Martin 提到的https://stackoverflow.com/a/15456323/1601580。
于 2013-06-12T16:40:27.173 回答
3
您只能将受支持的属性添加到节点和边。这些属性对 GrpahViz 具有特定意义。
要显示有关边或节点的额外信息,请使用该label
属性。
于 2013-03-17T00:25:14.133 回答
0
如果您已经有一个带有一些要标记的属性的图表,您可以使用它:
def draw_nx_with_pygraphviz_attribtes_as_labels(g, attribute_name, path2file=None):
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# https://stackoverflow.com/questions/15345192/draw-more-information-on-graph-nodes-using-pygraphviz
if path2file is None:
path2file = './example.png'
path2file = Path(path2file).expanduser()
g = nx.nx_agraph.to_agraph(g)
# to label in pygrapviz make sure to have the AGraph obj have the label attribute set on the nodes
g = str(g)
g = g.replace(attribute_name, 'label') # it only
print(g)
g = pgv.AGraph(g)
g.layout()
g.draw(path2file)
# https://stackoverflow.com/questions/20597088/display-a-png-image-from-python-on-mint-15-linux
img = mpimg.imread(path2file)
plt.imshow(img)
plt.show()
# remove file https://stackoverflow.com/questions/6996603/how-to-delete-a-file-or-folder
path2file.unlink()
# -- tests
def test_draw():
# import pylab
import networkx as nx
g = nx.Graph()
g.add_node('Golf', size='small')
g.add_node('Hummer', size='huge')
g.add_node('Soccer', size='huge')
g.add_edge('Golf', 'Hummer')
draw_nx_with_pygraphviz_attribtes_as_labels(g, attribute_name='size')
if __name__ == '__main__':
test_draw()
结果:
特别注意这两个巨大的并没有成为一个自循环,它们是两个不同的节点(例如,两个运动可以是巨大的,但它们不是同一个运动/实体)。
相关但使用 nx 绘图:使用默认为节点名称的节点标签绘制 networkx 图
于 2021-05-07T23:26:39.477 回答