Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to plot a graph using haskell graphViz

I'm planning to draw a graph using Haskell graphViz. I'm new to haskell, so this is quite difficult for me. Can someone show me a simple example ? I need a very simple example actually, so that I can understand it and use it in the scenario I'm working on

enter image description here

I get the above error on trying to install chart-cairo. I saw some examples on the internet and all of them requires chart-cairo. any idea how to resolve it ?

*EDITED" The output that I get after executing the code given by https://stackoverflow.com/users/2827654/jamshidh enter image description here

like image 361
Prasadika Avatar asked Dec 31 '13 00:12

Prasadika


1 Answers

(This addresses your original question, described in the title, and doesn't go into the problems installing chart-cairo or chart, etc, which really should be spun out into different questions)....

The graphviz package includes some example graphs in module Data.Graph.Inductive.Example that can be used to get you up and running. You can see the list of included graphs at http://hackage.haskell.org/package/fgl-5.3/docs/Data-Graph-Inductive-Example.html.... I will use one called clr479.

Once you have a graph, you can convert it to an internal structure representing the dot format using graphToDot. Note that you will need to supply some parameters, which are described in http://hackage.haskell.org/package/graphviz-2999.11.0.0/docs/Data-GraphViz.html. Just to get up and running, I will use the supplied nonClusteredParams.

let graphInDotFormat = graphToDot nonClusteredParams clr479 

Then, you will need to convert this to text suitable for input to the dot program. You can do this with renderDot . toDot

let outputText = renderDot $ toDot graphInDotFormat

and, as usual, you need to convert text to string to use putStrLn (don't just use show, as it will include quotes and escape sequences, which dot will not understand)

putStrLn $ unpack outputText

Putting this all together, the final program createDotFile.hs would be

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

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

Compile using ghc createDotFile.hs (remember to cabal install the required packages, as well as graphviz itself if you want to do anything with the output). On the commandline, you can now pipe the output of this program to dot, which will convert this to a usual format.... For instance, here I convert to svg

./createDotFile | dot -Tsvg > graph.svg

which on my linux box can be viewed by typing

eog graph.svg

visualization of clr479


Edit-

To clarify, the output of the haskell program needs to be provided as an input to GraphViz. The msi file to install graphviz on windows here http://www.graphviz.org/Download_windows.php.

like image 84
jamshidh Avatar answered Sep 28 '22 16:09

jamshidh