我正在尝试使用graphviz表示双向图结构。假设我有3个节点A
,B
,C
,对应于DNA片段。我想在每个节点中表示一些结构,但也表示节点之间的关系,可以说是A+ -> B- -> C+
。也就是说,A
中的正链后跟B
中的负链,然后是C
中的正链。我能想到的最好的是:
digraph G {
subgraph cluster_A {
Aa0 -> Ab0
Ab1 -> Aa1
{rank=same; Aa0 Aa1}
{rank=same; Ab0 Ab1}
}
subgraph cluster_B {
Ba0 -> Bb0
Bb1 -> Ba1
{rank=same; Ba0 Ba1}
{rank=same; Bb0 Bb1}
}
subgraph cluster_C {
Ca0 -> Cb0
Cb1 -> Ca1
{rank=same; Ca0 Ca1}
{rank=same; Cb0 Cb1}
}
Ab0 -> Bb1
Bb0 -> Ab1
Ba1 -> Ca0
Ca1 -> Ba0
}
此处,a
/ b
标签对应5'
/ 3'
个结尾,0
/ 1
标签对应正面/负股。我得到的是:
我的主要问题是:是否有可能告诉dot
自由旋转各个子图,同时保持其内部结构完好无损?在这个例子中,我希望B
能够颠倒过来。如果不可能,是否有任何黑客可以做到这一点?就像引入隐藏节点一样,在节点/边上放置权重?我对graphviz / dot并不熟悉,我不确切知道它能做什么。
为了澄清,我希望在每个集群内部表示更多结构(除了5'
和3'
之外),并且该结构在集群内应该是一致的。但我不知道每个群集的最佳方向,我想让dot
计算出来。
答案 0 :(得分:0)
出现顺序的微小变化
digraph G {
subgraph cluster_A {
Aa0 -> Ab0
Ab1 -> Aa1
{rank=same; Aa0 Aa1}
{rank=same; Ab0 Ab1}
}
subgraph cluster_B {
Bb1 -> Ba1
Ba0 -> Bb0
{rank=same; Ba0 Ba1}
{rank=same; Bb0 Bb1}
}
subgraph cluster_C {
Ca0 -> Cb0
Cb1 -> Ca1
{rank=same; Ca0 Ca1}
{rank=same; Cb0 Cb1}
}
Ab0 -> Bb1
Bb0 -> Ab1
Ba1 -> Ca0
Ca1 -> Ba0
}