Note
Go to the end to download the full example code.
Layouts for topological representations#
/home/docs/checkouts/readthedocs.org/user_builds/nngt/checkouts/latest/doc/examples/graph_structure/plot_layouts.py:132: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.
plt.tight_layout()
import os
import matplotlib as mpl
import matplotlib.pyplot as plt
import nngt
plt.rcParams.update({
"figure.facecolor": (0, 0, 0, 0),
"axes.labelcolor": "grey", "text.color": "grey"
})
nngt.seed(0)
# set matplotlib backend depending on the library
mpl_backend = mpl.get_backend()
if nngt.get_config("backend") == "graph-tool":
if mpl_backend.startswith("Qt4"):
if mpl_backend != "Qt4Cairo":
plt.switch_backend("Qt4Cairo")
elif mpl_backend.startswith("Qt5"):
if mpl_backend != "Qt5Cairo":
plt.switch_backend("Qt5Cairo")
elif mpl_backend.startswith("Qt"):
if mpl_backend != "QtCairo":
plt.switch_backend("QtCairo")
elif mpl_backend.startswith("GTK3"):
if mpl_backend != "GTK3Cairo":
plt.switch_backend("GTK3Cairo")
elif mpl_backend.startswith("GTK4"):
if mpl_backend != "GTK4Cairo":
plt.switch_backend("GTK4Cairo")
else:
plt.switch_backend("cairo")
# prepare figure and parameters
fig = plt.figure(figsize=(10, 8), constrained_layout=False)
gs = fig.add_gridspec(nrows=2, ncols=2, left=0, right=1, bottom=0, top=0.97,
wspace=0, hspace=0.05)
axes = [fig.add_subplot(gs[i, j]) for i in (0, 1) for j in (0, 1)]
num_nodes = 50
# spring-block layout for structured graph
room1 = nngt.Group(10)
room2 = nngt.Group(20)
room3 = nngt.Group(20)
names = ["R1", "R2", "R3"]
struct = nngt.Structure.from_groups((room1, room2, room3), names)
g = nngt.Graph(structure=struct)
for room in struct:
nngt.generation.connect_groups(g, room, room, "erdos_renyi", avg_deg=5)
nngt.generation.connect_groups(g, (room1, room2), struct, "erdos_renyi",
avg_deg=3, ignore_invalid=True)
nngt.generation.connect_groups(g, room3, room1, "erdos_renyi", avg_deg=5)
nngt.plot.library_draw(g, tight=False, axis=axes[0], ecolor="grey",
show=False)
axes[0].set_title("Spring-block layout")
# random layout
sw = nngt.generation.watts_strogatz(4, 0.3, nodes=num_nodes)
betw = nngt.analysis.betweenness(sw, "node")
nngt.plot.draw_network(sw, nsize=betw, ncolor="out-degree", axis=axes[1],
ecolor="lightgrey", tight=False, colorbar=True,
show=False)
axes[1].set_title("Random layout")
# circular layout for small-world networks
nngt.plot.draw_network(sw, nsize=betw, ncolor="out-degree", layout="circular",
ecolor="lightgrey", axis=axes[2], colorbar=True,
show=False, tight=False)
axes[2].set_title("Circular layout")
# spatial layout
c1 = nngt.geometry.Shape.disk(100)
c2 = nngt.geometry.Shape.disk(100, centroid=(50, 0))
shape = nngt.geometry.Shape.from_polygon(c1.union(c2))
max_nsize = 15
npos = shape.seed_neurons(num_nodes, soma_radius=0.5*max_nsize)
g = nngt.generation.distance_rule(10, shape=shape, nodes=num_nodes, avg_deg=5,
positions=npos)
cc = nngt.analysis.local_clustering(g)
nngt.plot.draw_network(g, ncolor=cc, axis=axes[3], ecolor="grey", show=False,
eborder_width=0.5, eborder_color="w", esize=10,
max_nsize=max_nsize, tight=False)
axes[3].set_title("Spatial layout")
plt.tight_layout()
plt.show()
Total running time of the script: (0 minutes 2.708 seconds)