带圆点的旋转子图形

问题描述:

我试图用graphviz来表示一个双向图形结构。假设我有3个节点AB,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标签对应于正/负链。我得到的是: enter image description here

我的主要问题是:是否有可能告诉dot*旋转单个子图,同时保持它们的内部结构是否完整?在这个例子中,我希望B可以上下颠倒。如果这是不可能的,是否有任何黑客可以做到这一点?像引入隐藏节点一样,在节点/边上放置权重?我不熟悉graphviz/dot,我不知道它能做什么。

为了澄清,我想在每个群集(除5'3'两端之外)中表示更多结构,并且该结构在群集内应该一致。但我并不知道每个集群的最佳方向,我想让dot来计算。

出场顺序

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 
} 
+0

对不起小的变化,如果我没有说清楚。我对这个特定的图表不感兴趣。我试图想象一个汇编程序的输出,它产生了100个这样的集群。我试图避免必须计算自己的相对方向,我希望得到'点'来为我做。 –

+0

对于点布局引擎,在定义集群后没有集群的旋转。然而,如果你以前知道旋转,你可以定义正确方向的簇。如果您不能事先进行定位,则可以尝试使用neato布局引擎而不是点。最后你可以用你选择的编程语言对点文件进行一些处理。甚至还有一个内置的脚本语言gvpr。 – stefan