A Julia package meant to make it easy to specify and draw graphs.
Features:
- graphs with node and edge labels of arbitrary type
- drawing of specified graphs
- DSL for easy drawing of graphs
To reduce the load times of this package, the drawing functionality has been implemented via optional dependencies.
To use the @tdraw macro or the tdraw function, using TikzGraphs needs to be run first.
To use the @draw macro or the draw function, using Plots, GraphRecipes needs to be run first.
To use the @mdraw macro or the mdraw function, you need to run using GraphMakie first, as well as using your favourite Makie backend (i.e. CairoMakie).
Nodes can not have
Intlabels for now.
Imperative graph specification:
g = EasyGraph()
push!(g, ("Bob" => "Alice", :hates))
push!(g, ("Alice" => "Julia", :loves))
draw(g)
Declarative graph specification:
g = EasyGraph(("Bob" => "Alice", :hates), ("Alice" => "Julia", :loves))
draw(g)
Easy DSL specification:
@draw begin
"Bob" => "Alice", :hates
"Alice" => "Julia", :loves
end
Multigraphs use a single edge with Set of labels:
@draw begin
"Bob" => "Alice", "hates"
"Bob" => "Alice", "loves"
end
Any types can be used:
@draw begin
Dict(:a => :b) => "s", [1, 2]
end
Self-edges are supported:
@draw begin
:A => :A, :id
:A => :B, :f
end
Single node with self-edge is broken due to JuliaPlots/GraphRecipes.jl#97