Graph::Easy - Manual

Tutorials - Inline Edge Labels

The goal

The goal of that tutorial is to show you how to create the following layout:

+------+                   +-----+      car          +-----+
| Bonn | ---   train   --> | Ulm | ----------------> | Hof |
+------+                   +-----+                   +-----+
               ^                         ^
               | buy                     | rent
               |                         |

Solution

[ Bonn ] -- [ train ] --> [ Ulm ] -- [ car ] --> [ Hof ]

[ ] -- buy --> [ train ] { shape: none; }
[ ] -- rent --> [ car ] { shape: edge; }

Explanation

For a normal edge between two nodes, the edge label will be put above the edge line:

[ Koblenz ] -- train --> [ Frankfurt ]
+---------+  train   +-----------+
| Koblent | -------> | Frankfurt |
+---------+          +-----------+

But if you want to have the edge label inside the edge, there is not yet a way to specify this directly. So one needs to use a trick to achive the desired layout. First, we convert the edge label into a normal node and then we use shape: none; to remove the border and an eventual fill color from the node:

[ ] --> [ Bonn ] -- [ train ] --> [ Ulm ] -- [ car ] --> [ Hof ]

[ ] -- buy --> [ train ] { shape: none; }
[ ] -- rent --> [ car ] { shape: none; }
+------+                   +-----+                   +-----+
| Bonn | ---   train   --> | Ulm | ---    car    --> | Hof |
+------+                   +-----+                   +-----+
               ^                         ^
               | bye                     | rent
               |                         |

To make the second part look like the arrow points to the edge, we set the node shape to edge:

[ ] --> [ Bonn ] -- [ train ] --> [ Ulm ] -- [ car ] --> [ Hof ]

[ ] -- buy --> [ train ] { shape: none; }
[ ] -- rent --> [ car ] { shape: edge; }
+------+                   +-----+      car          +-----+
| Bonn | ---   train   --> | Ulm | ----------------> | Hof |
+------+                   +-----+                   +-----+
               ^                         ^
               | buy                     | rent
               |                         |

Here is how that looks as SVG:

If you read this text, your browser does not yet support Scalable Vector graphics (SVG).

Contact and Bugreports

If you have questions, feel free to send me an email (Gnupg key). Bugreports should go to rt.cpan.org.