11

私の論文では、確率的な制御フローグラフを描く必要があります。つまり、エッジに確率が描かれた制御フローグラフ。

既存のグラフのディープコピーを使用でき、私のグラフは非常に似ているため、非常に便利なグラフツールを見つけました。

だから私の質問は、エッジの上/隣にエッジプロパティ(またはいくつかの文字列)を描画する可能性があるかどうかです。それが不可能または非常に複雑な場合、この場合に使用するのに適したツールはありますか?

編集: 2つのノード間にループを作成し、値が異なる有向エッジが必要です。これも可能性はありますか?だから私は両方の値を見ることができますか?これで、2方向のエッジを持つ有向グラフを見ることができますが、値は1つだけです。

したがって、たとえば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つの双方向エッジが得られます。

4

2 に答える 2

11

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")

ここに画像の説明を入力

于 2013-05-03T14:36:24.957 に答える
10
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. ただし、そのほとんどを 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 には、視覚的な外観をカスタマイズする多くの方法があることに注意してください。上記の例は単純に以下を生成します:

ここに画像の説明を入力

于 2012-12-20T14:52:17.270 に答える