如何使用haskell graphViz绘制图形

时间:2013-12-31 00:32:28

标签: haskell graph plot graphviz

我打算使用Haskell graphViz绘制图形。我是哈斯凯尔的新手,所以对我来说这很难。有人能给我看一个简单的例子吗?我实际上需要一个非常简单的例子,以便我能理解它并在我正在使用的场景中使用它

enter image description here

我在尝试安装chart-cairo时遇到上述错误。我在互联网上看到了一些例子,所有这些都需要图表 - cairo。任何想法如何解决它?

* EDITED” 执行https://stackoverflow.com/users/2827654/jamshidh给出的代码后得到的输出 enter image description here

1 个答案:

答案 0 :(得分:5)

(这解决了您在标题中描述的原始问题,并没有涉及安装chart-cairo或图表等的问题,这些问题确实应该分解成不同的问题)....

graphviz包中包含模块Data.Graph.Inductive.Example中的一些示例图,可用于启动和运行。您可以在http://hackage.haskell.org/package/fgl-5.3/docs/Data-Graph-Inductive-Example.html看到包含的图表列表....我将使用一个名为clr479的图表。

获得图表后,可以使用graphToDot将其转换为表示点格式的内部结构。请注意,您需要提供一些参数,这些参数在http://hackage.haskell.org/package/graphviz-2999.11.0.0/docs/Data-GraphViz.html中有所描述。只是为了启动并运行,我将使用提供的nonClusteredParams

let graphInDotFormat = graphToDot nonClusteredParams clr479 

然后,您需要将其转换为适合输入dot程序的文本。您可以使用renderDot . toDot

执行此操作
let outputText = renderDot $ toDot graphInDotFormat

并且,像往常一样,您需要将文本转换为字符串以使用putStrLn(不要只使用show,因为它将包含引号和转义序列,dot将不明白)

putStrLn $ unpack outputText

将所有这些放在一起,最终的程序createDotFile.hs将是

import Data.Text.Lazy
import Data.GraphViz
import Data.Graph.Inductive.Example
import Data.GraphViz.Printing

main = putStrLn $ unpack $ renderDot $ toDot $ graphToDot nonClusteredParams clr479 

使用ghc createDotFile.hs进行编译(请记住,如果要对输出执行任何操作,请安装所需的软件包,以及graphviz本身)。在命令行上,您现在可以将此程序的输出通过管道传输到dot,这会将其转换为通常的格式....例如,这里我转换为svg

./createDotFile | dot -Tsvg > graph.svg

可以通过输入

来查看我的linux盒子上的内容
eog graph.svg

visualization of clr479


编辑 -

为了澄清,haskell程序的输出需要作为GraphViz的输入提供。要在Windows http://www.graphviz.org/Download_windows.php上安装graphviz的msi文件。