Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DrawSimpleGraphs

Drawing functions for SimpleGraphs.

Given an UndirectedGraph, the function draw(G) draws G in its current embedding. If the graph does not have an embedding, then it is given a circular embedding.

If further operations on the drawing are desired, then Plots or SimpleDrawing functions may be used.

julia> using SimpleGraphs, DrawSimpleGraphs, Plots

julia> G = Cube(4)
Cube graph Q(4) (n=16, m=32)

julia> embed(G,:combined)

julia> draw(G)

julia> savefig("four-cube.png")

The draw function may be called with an optional second argument: draw(G,clear_first). If called as draw(G,false) then the drawing window is not erased prior to drawing.

Alternatively, draw!(G) is equivalent to draw(G,false).

Extra drawing functions

  • draw_nodes(G) just draws the vertices.
  • draw_edges(G) just draws the edges.

Embedding Commands

The following functions reside in SimpleGraphs. They are used to create and manipulate embeddings associated with a graph.

Create an embedding

embed(G,method) creates a new embedding of G. The second argument method is a symbol associated with an embedding algorithm. The method can be one of the following:

  • :circular (default) arranges the vertices in a circle.
  • :random arranges the vertices at random.
  • :spring arranges the vertices by modeling edges as springs holding repelling vertices together.
  • :stress arranges the vertices by attempting to put vertices geometric distance equal to their graph-theoretic distance.
  • :combined is equivalent to first performing a spring embedding followed by a stress embedding. Often gives nice results.
  • :spectral arranges the vertices based on the eigenvectors of the Laplacian matrix of the graph. Specifically, the x-coordinates come from the eigenvector associated with the second smallest eigenvalue, and the y-coordinates come from the eigenvector associated with the third smallest.

In addition, embed(G,xy) will give the graph an embedding specified in the dictionary xy where maps vertices to two-element vectors.

Modify an embedding

  • has_embedding(G) checks to see if the graph has been provided with an embedding.

  • getxy(G) retrieves a copy of the embedding. Modifying the output of getxy does not modify the embedding of the graph.

  • set_line_color(G,name) assigns the color in the string name to the edges and boundaries of the vertices. Defaults to "black".

  • get_line_color(G) returns the line color.

  • set_fill_color(G,name) assigns the color in the string name to be the fill color of the vertices. Defaults to "white".

  • set_vertex_size(G,sz) sets the size of the drawn vertices to the integer sz.

  • get_vertex_size(G) returns the size of the vertices.

  • transform(G,A,b) applies an affine transformation to all coordinates in the graph's drawing. Here A is 2-by-2 matrix and b is a 2-vector. Each point p is mapped to A*p+b. Special versions of this command are provided by scale, rotate, translate, and recenter. (Note: Some of these function names cause collisions, so I may change them.)

  • edge_length(G,uv) returns the geometric length of the edge uv. Note this fails if G does not have an embedding. edge_length(G) returns an array of the edge lengths.

Vertex Labels

Use draw_labels(G) after draw(G) to insert vertex names into the drawing. Optionally, add a font size, draw_labels(G,sz), to make the labels small enough to fit (or use set_vertex_size to make larger vertices).

julia> G = Cube(3)
Cube graph Q(3) (n=8, m=12)

julia> embed(G,:combined)

julia> set_vertex_size(G,20)

julia> draw(G)

julia> draw_labels(G)

Example: Knight's Tour

The function KnightTourDrawing(r,c) to solve the problem of finding a knight's tour on an r-by-c chess board and drawing the solution.

julia> KnightTourDrawing(8,8)
Searching for a Hamiltonian cycle in an 8-by-8 Knight's move graph
1374.144891 seconds (9.02 G allocations: 1002.489 GiB, 12.68% gc time)
Finished

About

Drawing functions for `SimpleGraphs`

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages