2011-03-11 45 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会非常不高兴(顶点的不断运动)!