1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
"""
.. _tutorials-dag:
======================
Directed Acyclic Graph
======================
This example demonstrates how to create a random directed acyclic graph (DAG), which is useful in a number of contexts including for Git commit history.
"""
import igraph as ig
import matplotlib.pyplot as plt
import random
# %%
# First, we set a random seed for reproducibility.
random.seed(0)
# %%
# First, we generate a random undirected graph with a fixed number of edges, without loops.
g = ig.Graph.Erdos_Renyi(n=15, m=30, directed=False, loops=False)
# %%
# Then we convert it to a DAG *in place*. This method samples DAGs with a given number of edges and vertices uniformly.
g.to_directed(mode="acyclic")
# %%
# We can print out a summary of the DAG.
ig.summary(g)
# %%
# Finally, we can plot the graph using the Sugiyama layout from :meth:`igraph.Graph.layout_sugiyama`:
fig, ax = plt.subplots()
ig.plot(
g,
target=ax,
layout="sugiyama",
vertex_size=15,
vertex_color="grey",
edge_color="#222",
edge_width=1,
)
plt.show()
|