來自ssteve和emden的答案非常有用,並且已被提升。 (謝謝你們兩位!)
我將來自兩者的輸入並在其更復雜的版本中回答此問題。我仍然不認爲解決方案是完美的,但這是迄今爲止我可以創造的最好的解決方案。未來的答案可以改進(見下面的內容似乎仍然缺乏),並且以可自動化的方式處理較大的圖形版本(請參見問題)將被接受來代替此答案。
首先,在總結到目前爲止最好的解決方案:轉標籤到xlabels爲邊緣的一些(例如所有雙向邊的一半,隨機選擇的),隨機顏色邊緣和相應的標籤(通過fontcolor
)。
在具體的,這裏是此解決方案,其中邊緣是隨機的紅色,綠色或黑色的一個實例:
digraph {
size = "6,10.5";
ratio = "fill";
node [shape = circle];
node [fontsize = 24];
edge [fontsize = 24];
{graph [rank=same]; edge[color=invis];1;}
{graph [rank=same]; edge[color=invis];2 -> 0 -> 3 -> 4;}
0 -> 0 [label="6: 0.1764"];
0 -> 4 [xlabel="4: 0.1304" color=blue fontcolor=blue];
0 -> 3 [xlabel="5: 0.1551" color=green fontcolor=green];
0 -> 2 [label="7: 0.1489" color=red fontcolor=red];
0 -> 1 [label="Z: 0.3893"];
4 -> 0 [xlabel="6: 0.1237" color=green fontcolor=green];
4 -> 3 [xlabel="5: 0.05201 " color=green fontcolor=green];
4 -> 2 [xlabel="7: 0.15" color=blue fontcolor=blue];
4 -> 1 [label="Z: 0.4585" color=red fontcolor=red];
3 -> 0 [xlabel="6: 0.1658"];
3 -> 4 [xlabel="4: 0.13" color=red fontcolor=red];
3 -> 3 [label="5: 0.1038" color=blue fontcolor=blue];
3 -> 2 [xlabel="7: 0.1616"];
3 -> 1 [label="Z: 0.4388"];
2 -> 0 [label="6: 0.1661" color=blue fontcolor=blue];
2 -> 4 [xlabel="4: 0.1295" color=red fontcolor=red];
2 -> 3 [label="5: 0.2078" color=green fontcolor=green];
2 -> 2 [label="7: 0.1406"];
2 -> 1 [label="Z: 0.356 "];
1 -> 0 [label="6: 0.1103" color=red fontcolor=red];
1 -> 4 [label="4: 0.2591" color=blue fontcolor=blue];
1 -> 3 [label="5: 0.1382" color=green fontcolor=green];
1 -> 2 [label="7: 0.08581 "];
1 -> 1 [label="Z: 0.1906"];
}
這產生: 
這仍然是不能完全令人滿意的,因爲:
- 雖然現在更容易將標籤追溯到其邊緣,但使用xlabel時,某些標籤會出現在奇怪的位置。 (例如在2 - > 4標籤上方)
- 隨機選擇哪些標籤變爲xlables看起來是任意的。也沒有辦法(我知道),以保證這總是會解決。
其他的事情我想:
- 使每一個標籤的xlabel。結果:一切都被壓縮,標籤彼此重疊並模糊。
- 對所有雙向邊使用xlabel。結果:與上面相同的問題。
- 使用不帶顏色的xlabels。結果:很難追蹤哪個標籤屬於什麼。
- 使用ssteve的
dir="both"
+ colorlist solution。隨機顏色邊緣。並且在3和11之間隨機設置labeldistance
來標識頭部和尾部標籤,以避免節點處的標籤重疊。結果:這很難自動化,並且仍然導致邊緣標籤重疊和難以追溯到它們對應邊緣的標籤。 (見下文)
下面是上述「我嘗試過的其他事情」解決方案列表中最後一項的示例。
size = "6,8.5";
ratio = "fill";
node [shape = circle];
node [fontsize = 24];
edge [fontsize = 24];
{graph [rank=same]; edge[color=invis];1;}
{graph [rank=same]; edge[color=invis];2 -> 0 -> 3 -> 4;}
0 -> 0 [label="6: 0.1764"];
0 -> 4 [dir="both", color="yellow:blue", labeldistance="5", headlabel=<<font color="yellow">4: 0.1304</font>>, taillabel=<<font color="blue">6: 0.1237</font>>];
0 -> 3 [dir="both", color="blue:black", labeldistance="8", headlabel=<<font color="blue">5: 0.1551</font>>, taillabel=<<font color="black">6: 0.1658</font>>];
0 -> 1 [label="Z: 0.3893"];
4 -> 1 [label="Z: 0.4585"];
3 -> 4 [dir="both", color="green:red", labeldistance="5", headlabel=<<font color="green">4: 0.13</font>>, taillabel=<<font color="red">5: 0.05201</font>>];
3 -> 3 [label="5: 0.1038"];
3 -> 1 [label="Z: 0.4388"];
2 -> 0 [dir="both", color="yellow:blue", labeldistance="11", headlabel=<<font color="yellow">6: 0.1661</font>>, taillabel=<<font color="blue">7: 0.1489</font>>];
2 -> 4 [dir="both", color="black:red", labeldistance="5", headlabel=<<font color="black">4: 0.1295</font>>, taillabel=<<font color="red">7: 0.15</font>>];
2 -> 3 [dir="both", color="blue:green", labeldistance="8", headlabel=<<font color="blue">5: 0.2078</font>>, taillabel=<<font color="green">7: 0.1616</font>>];
2 -> 2 [label="7: 0.1406"];
2 -> 1 [label="Z: 0.356 "];
1 -> 0 [label="6: 0.1103"];
1 -> 4 [label="4: 0.2591"];
1 -> 3 [label="5: 0.1382"];
1 -> 2 [label="7: 0.08581 "];
1 -> 1 [label="Z: 0.1906"];
}
這將產生:

其他的想法/改進徵求...