Pra*_*ika 4 plot haskell graph graphviz
我打算用Haskell graphViz绘制图形.我是哈斯凯尔的新手,所以对我来说这很难.有人能给我看一个简单的例子吗?我实际上需要一个非常简单的例子,这样我就能理解它并在我正在研究的场景中使用它
我在尝试安装chart-cairo时遇到上述错误.我在互联网上看到了一些例子,所有这些都需要图表 - cairo.任何想法如何解决它?
*EDITED"执行/sf/users/197935811/给出的代码后得到的输出
(这解决了您在标题中描述的原始问题,并没有涉及安装图表 - 开放或图表等的问题,这些问题确实应该分解成不同的问题)....
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)
编辑-
为了澄清,haskell程序的输出需要作为GraphViz的输入提供.要在windows上安装graphviz的msi文件,请访问http://www.graphviz.org/Download_windows.php.