2011-03-11 141 views
3

我正在使用Haskell樹上的多種搜索策略。我想要將它們可視化,併爲我正在執行的搜索添加動畫。到目前爲止,我發現的最好的圖像是graphviz,我可以通過編寫DOT文件(比如在Lisp的Land中)生成圖像,但我懷疑它是最好的方法。我的樹可以變得很大,所以我不想在我的程序中輸入每個節點的位置,我希望它們能夠自動正確放置。樹可視化和動畫

我也看了一下Gephi,但我不確定是否可以在其中輸入我的數據。

另外我的Tree數據類型是非常基本的:data Tree a = Leaf a | Branch (Tree a) (Tree a)

所以簡而言之,我正在尋找一種方法來獲取樹可視化和動畫在其中的搜索策略。我並不一定希望以Haskell爲中心的解決方案,但它可能會很棒。還能夠以gif等標準格式輸出圖像/動畫會有很大的幫助。

+1

Graphviz可以爲你做佈局。這不是你想要的佈局嗎? – 2011-03-11 01:25:53

+0

Land of Lisp(http://landoflisp.com/graph-util.lisp)中的示例使用'dot'來執行佈局,而不是手動放置節點位置。 – 2011-03-11 01:31:25

+0

@Jeremiah:是的,我想要一種安置。但是有什麼方法來製作它? – tmoisan 2011-03-11 01:36:29

回答

3

我會擴大我的評論: 我還沒有調查Ubigraph的定價政策,但是您可以從他們的網站(「基本」的一個?)下載免費版本。然後你可以安裝vacuum-ubigraph軟件包(在GHC 7.0下似乎有一個構建失敗的HackageDB,但是我剛剛設法將它安裝在我的7.0.2下而沒有問題)。一旦完成,你可以只啓動ubigraph_server並開始直接從ghci的「喂」它與你的數據結構:

import System.Vacuum.Ubigraph 

data Tree a = Leaf a | Branch (Tree a) (Tree a) 
data Root a = Root a 

tree = 
    Root 
    (Branch 
    (Branch 
     (Leaf "A") 
     (Leaf "B")) 
    (Leaf "C")) 

類型view tree,你會得到類似的東西:

enter image description here

你可以放大/縮小並旋轉它。不知道它有多實用(它顯示了像這樣的整個Haskell對象圖 - 注意共享[]),但有很多設置可供玩,所以您絕對可以使它看起來更好。動畫似乎也被支持。

2

如果你去Ubigraph路線你可以直接使用HUbigraph綁定,例如:

import Graphics.Ubigraph 
import Control.Monad 

main = do 
    h <- initHubigraph "http://127.0.0.1:20738/RPC2" 
    runHubigraph op h 

op = do 
    clear 
    vs <- mapM (const newVertex) [0..400] 
    mapM_ (setVAttr (VShape Sphere)) vs 
    let bind i = zipWithM (\a b -> newEdge (a,b)) vs (drop i vs ++ take i vs) 
    mapM_ bind [1..15] 
    return() 

我只是花了一些時間玩這個 - 它的樂趣,但不要試圖達到的值15,比如說40或者ubigraph會非常不高興(頂點的不斷運動)!