我打算使用Haskell graphViz绘制图形。我是哈斯凯尔的新手,所以对我来说这很难。有人能给我看一个简单的例子吗?我实际上需要一个非常简单的例子,以便我能理解它并在我正在使用的场景中使用它
我在尝试安装chart-cairo时遇到上述错误。我在互联网上看到了一些例子,所有这些都需要图表 - cairo。任何想法如何解决它?
* EDITED” 执行https://stackoverflow.com/users/2827654/jamshidh给出的代码后得到的输出
答案 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
编辑 -
为了澄清,haskell程序的输出需要作为GraphViz的输入提供。要在Windows http://www.graphviz.org/Download_windows.php上安装graphviz的msi文件。