Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
1.6 kB
2
Indexable
Never
import networkx as nx
import matplotlib.pyplot as plt

# Example JSON-like data structure, assuming each node has an 'id' and 'attributes'
data = {
    "nodes": [
        {"id": "CardAvailable", "attributes": {"Available": True, "CardActive": True}},
        {"id": "CardRegistered", "attributes": {"Registered": True, "CardInternational": False}},
        {"id": "CardInternational", "attributes": {"CardInternational": False, "DoesCardHasValid": False}},
        {"id": "RegisteredStateEscheat", "attributes": {"RegisteredState": True}}
    ],
    "edges": [
        {"from": "CardAvailable", "to": "CardRegistered"},
        {"from": "CardRegistered", "to": "CardInternational"},
        {"from": "CardInternational", "to": "RegisteredStateEscheat"}
    ]
}

# Create a NetworkX directed graph
G = nx.DiGraph()

# Add nodes with attributes
for node in data["nodes"]:
    G.add_node(node["id"], **node["attributes"])

# Add edges between nodes
for edge in data["edges"]:
    G.add_edge(edge["from"], edge["to"])

# Draw the graph
pos = nx.spring_layout(G)  # positions for all nodes

# nodes
nx.draw_networkx_nodes(G, pos, node_size=700)

# edges
nx.draw_networkx_edges(G, pos, arrows=True)

# node labels
labels = {node['id']: node['id'] for node in data["nodes"]}
nx.draw_networkx_labels(G, pos, labels, font_size=12)

# edge labels
edge_labels = {(edge['from'], edge['to']): ' ' for edge in data["edges"]}  # Dummy space for edge labels
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)

plt.axis('off')  # Turn off the axis
plt.show()  # Display the graph

Leave a Comment