2012-10-02 36 views
1

我是graphviz和DOT語言的新手。我正在嘗試使用cluster subgprahs生成圖。但是,當我擁有羣集,每個羣集都具有在腳本中精確指定的節點位置時,graphviz不會生成羣集的輪廓框或標籤! 具體地,如果我有以下DOT腳本:無法打印graphviz中集羣子圖的標籤和大綱框

digraph G{ 
subgraph cluster0{ 
label="Cluster 0" 
a->b 
} 
subgraph cluster1{ 
label="Cluster 1" 
c->d 
} 
} 

然後所產生的曲線圖是: Graph generated with clusters when nodes positions are not specified by the user

然而,具有以下DOT腳本,其中我確切指定的4個節點的節點位置:

digraph G{ 
subgraph cluster0{ 
label = "Cluster 0" 
a[pos="10,200"] 
b[pos="100,200"] 
a->b 
} 
subgraph cluster1{ 
label = "Cluster 1" 
c[pos="10,100"] 
d[pos="100,100"] 
c->d 
} 
} 

的圖表生成是: Graph generated with clusters when nodes positions are specified by the user

請注意,在這種情況下,不會打印羣集的大綱框和羣集的標籤!在這種情況下,您可以看到兩個羣集之間存在明確的劃分 - 羣集不重疊,因此原則上graphviz不應該有問題顯示它們,對嗎?

如何告訴graphviz繪製集羣輪廓框和標籤?無論如何? 任何幫助,將不勝感激!

謝謝!

+0

它正在爲我工​​作。你使用的是什麼版本的點?你使用什麼命令進行轉換? –

+0

我的網點版本:點 - graphviz版本2.28.0(20120313.1216)。我用於創建圖形的命令:dot -Tpdf -O filename.dot –

+0

您確定它爲您生成預期輸出?如在中,是否按照預期的pos值排列節點?你能展示你得到的輸出......這真的很有幫助!謝謝! – assassin

回答

1

點佈局引擎不支持pos屬性。

要顯示預定義所有節點位置的圖形,應使用neatofdp-n選項。

neato不支持羣集(雖然它seems it should now)。幸運的是,fdp呢!

因此,你可以使用下面的命令:

dot -Tpdf -Kpdf -n -O filename.dot 

fdp -Tpdf -n -O filename.dot 

不幸的是,相對於集羣中的節點的位置都行,但集羣仍然似乎得到被感動fdp(-n開關沒有區別)。

我沒有嘗試使用最新版本(我使用的是2.29.20120504),但是如果最新版本也不能正常工作,這可能是一個錯誤報告的情況。

順便說一句,因爲位置被認爲是英寸,這將創建一個非常大的圖。


輸出獲得帶有FDP(有或沒有-n開關) - I加入size=20限制圖像尺寸:

fdp output


替代解決方案,而無需使用pos

digraph G{ 
subgraph cluster0{ 
label = "Cluster 0" 
{rank=same; a->b;} 
} 
subgraph cluster1{ 
label = "Cluster 1" 
{rank=same; c->d; } 
} 

a -> c [style=invis]; 
} 
+0

我嘗試過使用fdp佈局引擎,並且它提供了與點相同的輸出。 當你在我的問題中運行第二段代碼時,你是否也獲得了與fdp相同的輸出? – assassin

+0

我添加了輸出到我的答案,相當大的調整。 – marapet

+0

是的,我終於得到了這個輸出,但是,集羣也被移動了,你也注意到了。我找不到解決這個問題的方法。 如果我只想要出現聚類標籤,並且不太關心這些框,是否有某種方法可以在圖表中的特定位置打印一些標籤文本 - 即在羣集的標題上,通常是由點或fdp? – assassin

0

您的代碼在viz.js的svg中正常顯示。我能夠看到集羣周圍的邊界。

也許你使用的graphviz版本是舊的,升級應該解決這個問題。