|
| 1 | +.. include:: ../../include/global.rst |
| 2 | + |
| 3 | +.. _tutorials-betweenness: |
| 4 | + |
| 5 | +======================= |
| 6 | +Visualizing Betweenness |
| 7 | +======================= |
| 8 | + |
| 9 | +.. _betweenness: https://igraph.org/python/doc/api/igraph._igraph.GraphBase.html#betweenness |
| 10 | +.. |betweenness| replace:: :meth:`betweenness` |
| 11 | +.. _edge_betweenness: https://igraph.org/python/doc/api/igraph._igraph.GraphBase.html#edge_betweenness |
| 12 | +.. |edge_betweenness| replace:: :meth:`edge_betweenness` |
| 13 | + |
| 14 | +This example will demonstrate how to visualize both vertex and edge betweenness with a custom defined color palette. We use the methods |betweenness|_ and |edge_betweenness|_ respectively. |
| 15 | + |
| 16 | +.. code-block:: python |
| 17 | +
|
| 18 | + import igraph as ig |
| 19 | + import matplotlib.pyplot as plt |
| 20 | + import math |
| 21 | + import random |
| 22 | +
|
| 23 | + # Generate graph |
| 24 | + random.seed(1) |
| 25 | + g = ig.Graph.Barabasi(n=200, m=2) |
| 26 | +
|
| 27 | + # Calculate vertex betweenness and scale it to be between 0.0 and 1.0 |
| 28 | + vertex_betweenness = g.betweenness() |
| 29 | + vertex_betweenness = [math.pow(i, 1/3) for i in vertex_betweenness] |
| 30 | + min_vertex_betweenness = min(vertex_betweenness) |
| 31 | + max_vertex_betweenness = max(vertex_betweenness) |
| 32 | + vertex_betweenness = [(i - min_vertex_betweenness) / (max_vertex_betweenness - min_vertex_betweenness) for i in vertex_betweenness] |
| 33 | +
|
| 34 | + # Calculate edge betweenness and scale it to be between 0.0 and 1.0 |
| 35 | + edge_betweenness = g.edge_betweenness() |
| 36 | + edge_betweenness = [math.pow(i, 1/2) for i in edge_betweenness] |
| 37 | + min_edge_betweenness = min(edge_betweenness) |
| 38 | + max_edge_betweenness = max(edge_betweenness) |
| 39 | + edge_betweenness = [(i - min_edge_betweenness) / (max_edge_betweenness - min_edge_betweenness) for i in edge_betweenness] |
| 40 | +
|
| 41 | + # Plot the graph |
| 42 | + fig, ax = plt.subplots() |
| 43 | + ig.plot( |
| 44 | + g, |
| 45 | + target=ax, |
| 46 | + layout="fruchterman_reingold", |
| 47 | + palette=ig.GradientPalette("white", "midnightblue"), # define a new color palette |
| 48 | + vertex_color=[int(betweenness * 255) for betweenness in vertex_betweenness], # colors are integers between 0 and 255 |
| 49 | + edge_color=[int(betweenness * 255) for betweenness in edge_betweenness], |
| 50 | + vertex_size=[betweenness*0.5+0.1 for betweenness in vertex_betweenness], # vertex_size is between 0.1 and 0.6 |
| 51 | + edge_width=[betweenness*0.5+0.5 for betweenness in edge_betweenness], # edge_width is between 0.5 and 1 |
| 52 | + vertex_frame_width=0.2, |
| 53 | + ) |
| 54 | + plt.show() |
| 55 | +
|
| 56 | +Note that we scale the betweennesses for the vertices and edges by the cube root and square root respectively. The choice of scaling is arbitrary, but is used to give a smoother, more linear transition in the sizes and colors of nodes and edges. The final output graph is here: |
| 57 | + |
| 58 | +.. figure:: ./figures/betweenness.png |
| 59 | + :alt: A graph visualizing the betweenness of each vertex and edge. |
| 60 | + :align: center |
| 61 | + |
| 62 | + A graph visualizing edge betweenness. White indicates a low betweenness centrality, whereas dark blue indicates a high betweenness centrality. |
| 63 | + |
0 commit comments