Setting random means each graph model starts with randomly placed vertices. Setting biased means we feed Fruchterman-Reingold with initial random placement, then feed that output into the input of node linlog, then feed that output into the input of edge linlog.

You can toggle whether or not edges are shown by pressing 'e' (not shown by default). You can toggle whether or not vertex labels are shown by pressing 'l' (not shown by default, and not recommended for large graphs unless you're zoomed in (future feature)).

  • , where is defined to be copies of with edges connecting the th copy of to the -st copy of (since , there is some randomness here)
  • , an example network modeling an academic department. This has 1,130 vertices and 5,635 edges. The model is as follows: 10 administrative folks, 20 professors (each teaching a 50-student class), 100 grad students (20 are TAs), 1,000 undergrads. The administrative folks and professors form a subgraph. Each grad student knows 10 professors. Each undergrad knows his/her TA, and 20% of them know their professor. Each undergrad takes just one course (for simplicity). Under edge-repulsion linlog, the large obvious cluster that forms is everyone except the undergrads and the TAs.
  • , the complete graph on 250 vertices
  • Facebook graph from SNAP (which has > 4,000 nodes)
  • Your own graph! Enter your adjacency list (and optionally, vertex labels).
Random Biased
Adjacency Lists
Vertex Labels


Node-Repulsion Linlog

Edge-Repulsion Linlog

The Linlog energy models show clear clusters of vertices. One algorithm one could apply to actually assign cluster numbers to vertices is -means. Note that both Linlog and -means have the potential to suffer from poor local solutions. The paper also briefly mentions extensions of this algorithm to compute clustering assignments (which involve computing barycenters — not too far off from the ideas of -means).