Graphvix

Graphviz for Elixir

Usage

  1. Start up a new process containing your graph
  iex> {:ok, graph} = Graphvix.new
  1. Add a single node
  iex> Graphvix.add_node(graph, :start)
  1. Add an edge between two nodes, creating the nodes if necessary
  iex> Graphvix.add_edge(graph, :start, :middle)
  1. Add a chain of connected nodes, creating any nodes and edges that do not exist
  iex> Graphvix.add_chain(graph, [:middle, :denouement, :end])
  1. Update settings to nodes and edges
  iex> Graphvix.update_node(graph, :start, shape: "box")
  iex> Graphvix.update_edge(graph, :denouement, :end, color: "red")
  1. Show the internal structure of the graph
  iex> Graphvix.show(graph)
  %{
    edges: %{
      start: %{
        middle: []
      },
      middle: %{
        denouement: []
      },
      denouement: %{
        end: [color: "red"]
      }
    },
    nodes: %{
      start: [label: "start", shape: "box"],
      middle: [label: "middle"],
      denouement: [label: "denouement"],
      end: [label: "end"]
    }
  }
  1. Convert the graph to .dot format
  iex> Graphvix.write(graph, :dot)
  "digraph G {
    end [label="end"];
    denouement [label="denouement"];
    middle [label="middle"];
    start [label="start",shape="box"];

    denouement -> end;
    middle -> denouement;
    start -> middle;
  }"
  1. Write out to a .dot file (named ā€œGā€ by default, but can take a 3rd argument as filename)
  iex> Graphvix.write(graph, :file)
  :ok
  iex> Graphvix.write(graph, :file, "my_graph")
  :ok