2015-10-20 87 views
1

我試圖用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來計算。

回答

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

對不起小的變化,如果我沒有說清楚。我對這個特定的圖表不感興趣。我試圖想象一個彙編程序的輸出,它產生了100個這樣的集羣。我試圖避免必須計算自己的相對方向,我希望得到'點'來爲我做。 –

+0

對於點佈局引擎,在定義集羣后沒有集羣的旋轉。然而,如果你以前知道旋轉,你可以定義正確方向的簇。如果您不能事先進行定位,則可以嘗試使用neato佈局引擎而不是點。最後你可以用你選擇的編程語言對點文件進行一些處理。甚至還有一個內置的腳本語言gvpr。 – stefan