Visualizing graphs
Graphite provides separate functions for visualizing undirected and directed
graphs: plotUGraph
and plotDGraph
respectively.
Lets define a directed graph:
foundationUniverse :: DGraph String ()
foundationUniverse = fromArcsList
[ "Helicon" --> "Nishaya"
, "Helicon" --> "Wencory"
, "Nishaya" --> "Wencory"
, "Wencory" --> "Getorin"
, "Wencory" --> "Cinna"
, "Wencory" --> "Lystena"
, "Lystena" --> "Helicon"
, "Cinna" --> "Florina"
, "Florina" --> "Nishaya"
, "Florina" --> "Derowd"
, "Derowd" --> "Cinna"
, "Derowd" --> "Lystena"
]
And visualize it with plotDGraph
:
main :: IO ()
main = plotDGraph foundationUniverse
We could now convert this graph to an undirected one using the
toUndirected
function and then visualize it with plotUGraph
:
main :: IO ()
main = plotUGraph $ toUndirected foundationUniverse
Visualizing edged graphs
When rendering the edge attributes is needed, use the plotUGraphEdged
and
plotDGraphEdged
functions instead.
Lets define a directed graph with Double
edge attributes as the distances
between planets in light years:
foundationUniverse :: DGraph String Double
foundationUniverse = fromArcsList
[ Arc "Helicon" "Nishaya" 200.00
, Arc "Helicon" "Wencory" 382.20
, Arc "Nishaya" "Wencory" 820.32
, Arc "Wencory" "Getorin" 200.40
, Arc "Wencory" "Cinna" 190.90
, Arc "Wencory" "Lystena" 302.08
, Arc "Lystena" "Helicon" 500.00
, Arc "Cinna" "Florina" 630.80
, Arc "Florina" "Nishaya" 090.00
, Arc "Florina" "Derowd" 160.11
, Arc "Derowd" "Cinna" 807.30
, Arc "Derowd" "Lystena" 200.89
]
And visualize it with plotDGraphEdged
:
main :: IO ()
main = plotDGraphEdged foundationUniverse
And again, we could now convert this graph to an undirected one using
toUndirected
and then visualize it with plotUGraphEdged
:
main :: IO ()
main = plotUGraphEdged $ toUndirected foundationUniverse
Plotting to PNG images
In order to output the graphs to PNG images, a new pair of functions are
available: plotUGraphPng
and plotDGraphPng
. These will take a file path for
the PNG output image as an additional parameter.
Lets use the first foundationUniverse graph to try them out:
main :: IO ()
main = plotDGraphPng foundationUniverse "./foundation.png"
And convert it to undirected as well:
main :: IO ()
main = plotUGraphPng (toUndirected foundationUniverse) "./foundation.png"