带圆点的旋转子图形
问题描述:
我试图用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
来计算。
答
出场顺序
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
}
对不起小的变化,如果我没有说清楚。我对这个特定的图表不感兴趣。我试图想象一个汇编程序的输出,它产生了100个这样的集群。我试图避免必须计算自己的相对方向,我希望得到'点'来为我做。 –
对于点布局引擎,在定义集群后没有集群的旋转。然而,如果你以前知道旋转,你可以定义正确方向的簇。如果您不能事先进行定位,则可以尝试使用neato布局引擎而不是点。最后你可以用你选择的编程语言对点文件进行一些处理。甚至还有一个内置的脚本语言gvpr。 – stefan