I’ve worked with igraph a few times now, but I usually dive straight into what I want to do and bash my way through. Recently I decided to review the fundamentals…annotating and diagramming to help me remember the terminology and concepts. This post is a collection of those visual notes.

I’ve worked with igraph a few times now, but I usually dive straight into what I want to do and bash my way through. Recently I decided to review the fundamentals as written in the first chapter of this book draft by Csardi, Nepusz, and Airoldi. I haven’t been able to track down the final version of the book, so let me know if you know where it is!

Along the way, I took Keynote-notes – annotating and diagramming to help me remember the terminology and concepts. This post is a collection of those visual notes from chapters 1 & 2.

Balls and sticks

I think of network graphs as a bunch of balls and sticks, not unlike the magnetic building sticks my baby cousin plays with.

Ignore the top right example and you’ll find stellar examples of network graphs. The graphs can come in different shapes and sizes, and even in a rainbow of colors.

In real networks, the silver balls above may also come in varied sizes or colors or shapes. Sometimes the sticks become arrows, or be fat or thin. Using the official terminology, these “balls” are called vertices or nodes, and the “sticks” are called edges. The vertices, edges, or graph as a whole may have additional characteristics, or attributes, that describe them, such as size or group. A graph containing edges of different thicknesses, for example, is a weighted graph.

If we zoom in on a pair of vertices, we discover a bit more terminology. Edges are defined by the two vertices on each end of the edge. In a directed edge (with an arrow / has a direction), the vertex at the “arrowhead” is the head and the “feathered” vertex is the tail.

The igraph class

All the information about a network (e.g. those magnetic structures above) can be stored in an igraph object. A graph (g) in the network context is the combination of vertices and edges that make up a network. This does not refer to an actual plot, although you can also easily plot() a graph. (Confusing, I know.)

Seeing the output of the igraph object for the first time is a bit overwhelming, but this is what it is telling you:

Note: The book makes extensive use of the igraphdata package, which includes several example igraph objects, such as the dataset macaque, shown above. This makes it easy to explore igraph class objects without creating one yourself.

Vertices and edges

Once you have a graph object chances are, you’ll want to look at its parts and maybe modify it. The two basic parts of a graph are the vertices and edges, which you can extract with V() and E().

You can specify specific vertices/edges using their position or name:

V(macaque)[1]
V(macaque)["V1"]

E(macaque)[1]
E(macaque)["V1|V2"]

To remove or add vertices/edges to a graph, you can use your basic arithmetic operators. Subtracting is easy – just describe explicitly which vertices or edges you want to remove.

macaque - V(macaque)[1:42]
## IGRAPH 5db20f6 DN-- 3 4 -- 
## + attr: Citation (g/c), Author (g/c), shape (v/c), name (v/c)
## + edges from 5db20f6 (vertex names):
## [1] Id->35 Id->36 35->Id 36->Id

To add, you may need the vertices() or edges() functions. Note that edges can only connect existing vertices.

macaque - V(macaque)[1:42] + edges("Id","Id", "Id","35") 
## IGRAPH 968a671 DN-- 3 6 -- 
## + attr: Citation (g/c), Author (g/c), shape (v/c), name (v/c)
## + edges from 968a671 (vertex names):
## [1] Id->35 Id->36 35->Id 36->Id Id->Id Id->35
macaque - V(macaque)[1:42] + edges("Id","a vertex that doesn't exist yet") 
## Error in as.igraph.vs(e1, toadd): Invalid vertex names

Like in the examples above, a graph may contain edges that are self-loops – a vertex connected to itself – or multigraphs (a.k.a. duplicated edges). You may sometimes need to simplify() a graph to use certain clustering functions (such as cluster_fast_greedy()) or do other analyses. This can mean removing loops, removing duplicate edges, or combining the attributes of duplicate edges using a summary functions.

Graph bits & pieces

Imagine standing on a vertex and starting to walk down an edge, continuing onto connected vertices and edges. The edges that you walk on make up what is called–surprise, surprise–a path. Often, network problems involve finding the shortest path(s), or geodesic, between two points (think flight connections, for example).

To extract a path from an igraph object, you can specify either the the vertices or edges that make up the path, as seen on the right above.

Degree is an attribute of a vertex that describes the number of adjacent edges. The shortest loop that can be made with the edges is the diameter of the graph.

When all vertices of a graph are joined to each other via edges, a graph is considered to be connected. Directed graphs can be weakly connected when vertices are connected in one direction or strongly connected when vertices are connected bidirectionally. Graphs where vertices are not all joined are unconnected, with components that are connected.

Some types of graphs come with special names. Biconnected graphs include at least 2 paths between each pair of vertices. A directed acyclic graph (DAG) is a graph without (“a-”) cyclic paths. That is, no matter what vertex you start on, any path will lead to one of the ending vertices without any repeat vertices.

Sometimes, you may be interested in just a portion of the graph, or subgraph. A graph that contains all the vertices and all the edges from the original graph is an induced subgraph.

Another way to zoom in on a large graph is via an ego network, where you focus on a specific vertex and its closest neighbors.

That’s all folks!

There’s plenty more detail within the pdf book, but the rest will need to wait until another time!