我正在使用dot绘制图表。为了使其易于阅读,我需要微调边缘标签的位置,并且(如果可能)使某些边缘是直线而其他边缘是曲线。我希望能获得关于如何在dot中完成这些事情的一般建议,但基于具体性,我在下面列出了我的具体问题。
以下是代码,后面跟着当前的外观:
以下是代码,后面跟着当前的外观:
digraph myGraph {
rankdir=BT;
splines=line;
"AB.BC" -> "AB.AC.BC" [weight=4]
"AB.BC" -> "ABC" [color=red,style=dashed,label="I(A;C|B)"]
"A.B.C" -> "A.BC" [color=red, label="I(B;C)"]
"A.B.C" -> "AC.B" [color=red, label="I(A;C)"]
"A.B.C" -> "AB.C" [color=red, label="I(A;B)"]
"A.BC" -> "AB.BC" [color=red, label="I(A;B)"]
"A.BC" -> "AC.BC" [color=red, label="I(A;C)"]
"AB.AC.BC" -> "ABC" [weight=4]
"AC.B" -> "AC.BC" [color=red, label="I(B;C)"]
"AC.B" -> "AB.AC" [color=red, label="I(A;B)"]
"AC.BC" -> "AB.AC.BC" [weight=4]
"AC.BC" -> "ABC" [color=red,style=dashed, label="I(A;B|C)"]
"AB.AC" -> "AB.AC.BC" [weight=4]
"AB.AC" -> "ABC" [color=red,style=dashed, label="I(B;C|A)"]
"AB.C" -> "AB.BC" [color=red, label="I(A;B)"]
"AB.C" -> "AB.AC" [color=red, label="I(A;C)"]
}
这个图离我想要的很接近,但有几个问题:
- 标签的位置使人难以清楚地看到哪个标签与哪个边相关
- 由于某种原因,一些边在标签处弯曲。(在添加标签之前,它们是直线。)
我尝试过调整rowsep
和nodesep
属性,但没有改善。如果我删除splines=line
行,它会变得可读,但并不是我想要的:
虚线边缘弯曲是可以的——实际上很好,因为它将防止它们重叠到从顶部开始的第二个节点——但实线应该是直的。
我想了解如何微调节点、边缘和标签的位置(因为文档真的没有帮助,好的例子很难找到),但具体来说,我的问题是:
我能告诉dot使特定的边缘弯曲而保持其他边缘直线吗?(我知道有一个
splineType
边缘属性,但文档没有给我使用它的提示,我甚至不确定这是否是它的作用。)如果上面的不可能,如何告诉dot将直线变成死直,而不是在标签处弯曲?
对于直线边缘,如何微调标签的位置?我不介意手动操作,似乎有几个边缘属性可以帮助我做到这一点,但它们中没有一个似乎有任何效果,所以我一定做错了什么。
作为一个额外的问题:有没有办法让节点更像网格布局,使它们垂直对齐?
任何答案都会受到赞赏,但最有帮助的答案是解释如何更普遍地处理这些问题,为了未来的访问者,而不只是修复我的代码。