Graph::Easy - Manual

Output Formats and their Limitations

If you haven't done so, please read the Overview first.

This chapter describes the possible output formats and their limitations, strengths and weaknesses.

Formats

Graph::Easy layouts graphs in the following output formats:

In addition, the graph can be dumped in any of the following graph description languages:

ASCII

The ASCII output is limited to only two colors, one for the foreground, and one for the background.


  #============================================#
  H                                            v
+---------+     ........     +---------+     +--------+     +--------+
| Bautzen | --> : Bonn : --> | Koblenz | --> | Berlin | --> | Kassel |
+---------+     :......:     +---------+     +--------+     +--------+
  ^               |            ^               ^
  :               +------------+---------------+
  :                            |
  :             +------+       |
  ............. | Ulm  | ------+
                +------+

The following limitations apply:

Box Art

Works like the ASCII output, but uses Unicode "box drawing" characters instead. This creates gap-less edges, and looks generally much better.
Box art output shares most of the limitations with the ASCII output, except:


                                My sample graph

                                             Test
                                             label
            ┌···············································┐
            :                                               v
          ┌─────────────┐  label   ▛▀▀▀▀▀▀▜               ┌───────┐
          │     One     │ ───────> ▌ Two  ▐ ▬▬▬▬▬▬▬▬▬▬▬▬> │ Four  │ ···   None
          └─────────────┘          ▙▄▄▄▄▄▄▟               └───────┘
            ║                                Test label
            ║                        ┌╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴┐
            v                        ╵                      v
          ┌−−−−−−−−−−−−−┐          ████████               ┏━━━━━━━┓     ┌───────┐
  ┌·······╎    Three    ╎ <══════> █ Five █ ────────────> ┃ Seven ┃ ─── │ Eight │
  :       └−−−−−−−−−−−−−┘          ████████               ┗━━━━━━━┛     └───────┘
  :         ^                        │                                    ^
  :         │                        │                                    │
  : Test    │ Test label             └────────────────────────────────────┘
  : label   v
  :       ┌─────────────┐
  :       │    Sixty    │
  :       │    Six      │
  :       │    and      │
  └······>│    six      │
          └─────────────┘

HTML

The following table shows the main features and their support in the main browsers.

Feature Opera Mozilla
Firefox
Konqueror IE
Node shapes:
rounded, circle, ellipse
No Yes No No
Nodes with angled borders:
diamond, house, triangle, etc.
No Yes Yes 5.x +
Node shape: point Yes Yes Yes 5.x +
Gapless edges Yes Yes Yes Yes
Padding between graph content and border Yes Yes 3.4 + No

Here is a sample graph:

My sample graph
  Test label  
     
 v
  > Five   > Seven   Eight   None
   
       ^
     
 
  > Three <   One label > Two   > Four
 
 ^   Test
label
 ^
  Test label      
 
 v
Six

Notes:

SVG

SVG output looks the best and supports the most features. Please see the SVG page for examples.

Graphviz

Graph::Easy also allows the output of Graphviz code, which can be feed to an external program like dot or neato to create .png, .ps, .svg or many other file formats:

perl examples/as_graphviz my_graph.txt | dot -Tpng -o graph.png
perl examples/as_graphviz my_graph.txt | dot -Tsvg -o graph.svg

The output to graphviz does not yet take some features of Graph::Easy into account. The reason is that graphviz works differently than Graph::Easy and at the moment there seems no easy way to implement this. Here is a short list of features that are incomplete:

In addition, the following output styles are not yet supported. These probably can be emulated with some graphviz-fu, but there was not enough time to find out how:

Note that unlike with the other output methods, Graph::Easy has less control over the layout when outputting graphviz code. Sometimes this improves graph layout, because dot et. al. are not restricted to a grid-like layout, but certain features might be rendered quite differently by dot than by Graph::Easy.
Especially the per-node and per-edge flow and relatively placed nodes will likely be lost in the generated graphviz code.

If you are familiar with graphviz code and want to improve the output of Graph::Easy, please drop me a message.

GraphML

GraphML is an XML-based text format for describing graphs.
More details about GraphML can be found at the GraphML homepage.

yED

yED is an XML-based text format for describing graphs and a variant of GraphML.
More details about yEd can be found at the yWorks homepage.