Directed Graph Examples¶
This page demonstrates examples of generating interactive directed graphs.
Example 1: A Simple Directed Graph with Arrows¶
This example shows a basic directed graph where edge directions are indicated by arrows.
Simple Directed Graph
The Python code to generate the graph data:
import networkx as nx
DG = nx.DiGraph()
DG.add_edges_from([
(1, 2, {'label': 'Rel A'}),
(1, 3, {'label': 'Rel B'}),
(2, 4, {'label': 'Rel C'}),
(3, 4, {'label': 'Rel D'}),
(4, 1, {'label': 'Rel E (Cycle)'}) # Creates a cycle
])
# Add some node properties
for i in DG.nodes():
DG.nodes[i]['label'] = f'DNode {i}'
DG.nodes[i]['title'] = f'This is directed node {i}'
if i == 1:
DG.nodes[i]['color'] = 'lightcoral'
DG.nodes[i]['shape'] = 'star'
if i == 4:
DG.nodes[i]['color'] = 'lightgreen'
The vis_options
used (as a Python dictionary in the generation script):
{
"edges": {
"arrows": {
"to": {"enabled": True, "scaleFactor": 1, "type": "arrow"}
},
"font": {"align": "middle", "size": 10},
"smooth": {"enabled": True, "type": "curvedCW", "roundness": 0.2}
},
"nodes": {
"font": {"size": 14}
},
"physics": {"enabled": True},
"layout": {
"hierarchical": False,
"randomSeed": 789
},
"interaction": {"navigationButtons": True, "hover": True}
}
Example 2: Course Prerequisites (Hierarchical Layout)¶
This example demonstrates a directed graph representing course prerequisites, using a hierarchical layout to show dependencies.
Course Prerequisites
The Python code to generate the graph data:
import networkx as nx
DG = nx.DiGraph()
courses = {
"CS101": {"label": "Intro to CS", "level": 1, "title": "Fundamentals of Computer Science"},
"CS102": {"label": "Data Structures", "level": 2, "title": "Basic Data Structures and Algorithms"},
"MA101": {"label": "Calculus I", "level": 1, "title": "Differential Calculus"},
"CS201": {"label": "Algorithms", "level": 3, "title": "Advanced Algorithm Design"},
"CS202": {"label": "Operating Systems", "level": 3, "title": "Principles of Operating Systems"},
"CS301": {"label": "Compilers", "level": 4, "title": "Compiler Construction"}
}
for course_id, attrs in courses.items():
DG.add_node(course_id, **attrs)
# Edges: (prerequisite, course)
DG.add_edges_from([
("CS101", "CS102"),
("MA101", "CS102"),
("CS102", "CS201"),
("CS102", "CS202"),
("CS201", "CS301"),
("CS202", "CS301")
])
The vis_options
used (as a Python dictionary in the generation script):
{
"nodes": {
"shape": "box",
"font": {"size": 12, "face": "Arial"},
"margin": 10
},
"edges": {
"arrows": {"to": {"enabled": True, "scaleFactor": 0.8, "type": "arrow"}},
"smooth": {"enabled": True, "type": "cubicBezier", "forceDirection": "vertical", "roundness": 0.4}
},
"layout": {
"hierarchical": {
"enabled": True,
"direction": "UD",
"sortMethod": "directed",
"levelSeparation": 150,
"nodeSpacing": 120
}
},
"physics": {"enabled": False},
"interaction": {"hover": True, "dragNodes": False, "zoomView": True, "dragView": True}
}