web-dev-qa-db-ja.com

Graphviz:反対側にエッジラベルを配置します(II)

関連する質問は次のとおりです。

Graphviz:エッジラベルを反対側に配置

graphvizでEdgeラベルをEdgeに配置する方法

次のドットファイルを検討してください。

digraph {
0 -> 1 [ len=2, label="(1, 0)"];
0 -> 1 [ len=0.5, dir=none, weight=10];
1 -> 0 [ len=2, label="(0, -1)"];
}

次の結果が得られます。

enter image description here

どうすれば対称バージョンを取得できますか? (0,-1)は右のegdeの左側にある必要があります。

17
Hotschke

ご存知のように、graphvizでは水平方向のラベル配置を選択できないため、すべてのソリューションは少しハックです。

試み#1:marapetによって投稿された2つの解決策( ここ

  1. Labelangleとlabeldistanceのトリックは、さまざまな長さのラベルテキストにうまく適応しません(新しい距離/角度の数値を再計算する必要があります)。

  2. Splines = falseトリックは、ノード間のエッジの数>ノードの数の場合はうまく機能しません(エッジが重なることになります)。

試行#2:曲線エッジを作成するためのxlabelsとアンカー

これは、graphvizの比較的新しい機能 xlabel を使用します(ノード/エッジの座標が決定された後にラベルを配置します)。 ports 機能は、カーブしたエッジを作成するために使用されます。ラベルのパディングはスペース文字で実現されます。

gv

digraph {
forcelabels=true;

    0:sw -> 1:nw [ dir=forward, xlabel="  (1, 0)  "];
    0 -> 1 [dir=none];
    1:ne -> 0:se [ dir=backward, xlabel= "  (0, -1)  "];

}

Xlabelを使用するには、graphvizバージョン> 2.29が必要だと思います。

22
Richard EB