I’m using the Rhizome package for Clojure to rapidly prototype the dependency graph for a crafting system. It’s nice to be able to add and remove components while generating visualizations on-the-fly. Clojure’s simple, composable syntax, aided by paredit, makes shuffling around key-value pairs, and even whole dictionaries, quick and easy.
The existing Rhizome documentation shows simple examples for labeling the nodes of a directed graph. In order to show the relationship between nodes on the graph, I’d like to also label the edges, or the arrows connecting the nodes.
Rhizome provides a keyword argument :edge->descriptor
to most of its functions. Consulting the source code and the tests for the Rhizome package, I learned that the functions expect :edge->descriptor
to be a function accepting two arguments for each edge: src
, the source node, and dst
, the destination node. In order to label the edges, the anonymous function I’m binding to :edge->descriptor
will return a dictionary containing the key :label
and the value for the edge’s label.
Here’s an example using the simple graph from the Rhizome documentation:
1 2 3 4 5 6 7 8 9 |
|
Now, I’ll use a dictionary of dictionaries to associate the source and destination nodes with a label for each edge.
1 2 3 4 5 6 7 8 9 |
|
I’ve submitted a pull request to Rhizome to add this example to the documentation.