如何使用haskell graphViz绘制图形

Pra*_*ika 4 plot haskell graph graphviz

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

在此输入图像描述

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

*EDITED"执行/sf/users/197935811/给出的代码后得到的输出 在此输入图像描述

jam*_*idh 5

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

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 
Run Code Online (Sandbox Code Playgroud)

然后,您需要将其转换为适合输入dot程序的文本.你可以这样做renderDot . toDot

let outputText = renderDot $ toDot graphInDotFormat
Run Code Online (Sandbox Code Playgroud)

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

putStrLn $ unpack outputText
Run Code Online (Sandbox Code Playgroud)

把这一切放在一起,最终的程序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 
Run Code Online (Sandbox Code Playgroud)

使用编译ghc createDotFile.hs(记住要安装所需的包,如果你想对输出做任何事情,请安装graphviz).在命令行上,您现在可以将此程序的输出通过管道传输dot,将其转换为通常的格式....例如,在这里我转换为svg

./createDotFile | dot -Tsvg > graph.svg
Run Code Online (Sandbox Code Playgroud)

可以通过输入查看我的linux盒子上的内容

eog graph.svg
Run Code Online (Sandbox Code Playgroud)

clr479的可视化


编辑-

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