繁体   English   中英

networkx:在边缘绘制文本

[英]networkx: Draw text on edges

对于我的论文,我需要绘制一些概率控制流程图。 即控制流程图,边缘上描绘的概率。

我发现图形工具看起来非常有用,因为它可以使用现有图形的深层复制,我的图形非常相似。

所以我的问题是,如果有可能在边缘上/旁边绘制边缘属性(或一些字符串)? 如果它不可能或非常复杂,那么在这种情况下是否有更好的工具?

编辑:我需要有向边,甚至可以在2个节点之间创建循环并具有不同的值。 这也有可能吗? 所以我可以看到两个值? 到现在为止,我可以看到带有双向边的有向图,但它只有一个值。

因此,例如在networkx中(参考Hooked),它看起来像:

G = nx.MultiDiGraph()
G.add_edge(0,1)
G.add_edge(1,0)
labels = {(0,1):'foo', (1,0):'bar'}

这样'foo'和'bar'都可见,你可以看到它们连接的方向。

但是当networkx呈现它时,我得到1个带有1个标签的双向边缘。

您可以使用graph_ tool使用graph_draw()函数的“edge_text”选项在边缘旁边绘制文本:

from graph_tool.all import *

g = Graph()
g.add_vertex(4)
label = g.new_edge_property("string")
e = g.add_edge(0, 1)
label[e] = "A"
e = g.add_edge(2, 3)
label[e] = "foo"
e = g.add_edge(3, 1)
label[e] = "bar"
e = g.add_edge(0, 3)
label[e] = "gnat"

graph_draw(g, edge_text=label, edge_font_size=40, edge_text_distance=20, edge_marker_size=40, output="output.png")

在此输入图像描述

import networkx as nx   

# Sample graph
G = nx.Graph()
G.add_edge(0,1)
G.add_edge(1,2)
G.add_edge(2,3)
G.add_edge(1,3)

labels = {(0,1):'foo', (2,3):'bar'}

pos=nx.spring_layout(G)

nx.draw(G, pos)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels,font_size=30)

import pylab as plt
plt.show()

在此输入图像描述

编辑:如果你需要带有边缘标签的networkx ,我认为你不能在networkx完全做到这networkx 但是你可以在python中完成大部分工作,并使用另一个程序进行渲染和布局:

import networkx as nx

G = nx.MultiDiGraph()
G.add_edge(0,1, label='A')
G.add_edge(1,0, label='B')
G.add_edge(2,3, label='foo')
G.add_edge(3,1, label='bar')   
nx.write_dot(G, 'my_graph.dot')

我使用graphviz将其转换为图像。 在我的Unix机器上,我从命令行运行它

dot my_graph.dot -T png > output.png

这提供了您正在寻找的所需输出。 请注意,graphviz有许多方法可以自定义视觉外观 上面的例子简单地产生:

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM