Spaces:
Sleeping
Sleeping
import json | |
from pyvis.network import Network | |
def create_graph(nodes, edges, physics_enabled=True): | |
net = Network(notebook=True, height='100vh', width='100vw', bgcolor='#222222', font_color='white', cdn_resources='remote') | |
for node in nodes: | |
net.add_node( | |
node['id'], | |
label=node['label'], | |
title=node['label'], | |
color='blue' if node['label'] == 'OOP' else 'green' | |
) | |
for edge in edges: | |
net.add_edge(edge['source'], edge['target'], title=edge['type']) | |
net.force_atlas_2based( | |
gravity=-50, | |
central_gravity=0.01, | |
spring_length=100, | |
spring_strength=0.08, | |
damping=0.4 | |
) | |
options = { | |
"nodes": { | |
"physics": physics_enabled | |
}, | |
"edges": { | |
"smooth": True | |
}, | |
"interaction": { | |
"hover": True, | |
"zoomView": True | |
}, | |
"physics": { | |
"enabled": physics_enabled, | |
"stabilization": { | |
"enabled": True, | |
"iterations": 200 | |
} | |
} | |
} | |
net.set_options(json.dumps(options)) | |
return net | |
def visualize_graph(json_data, physics_enabled=True): | |
if isinstance(json_data, str): | |
data = json.loads(json_data) | |
else: | |
data = json_data | |
nodes = data['nodes'] | |
edges = data['edges'] | |
net = create_graph(nodes, edges, physics_enabled) | |
html = net.generate_html() | |
html = html.replace("'", "\"") | |
html = html.replace('<div id="mynetwork"', '<div id="mynetwork" style="height: 100vh; width: 100%;"') | |
return f"""<iframe style="width: 100%; height: 100vh; border: none; margin: 0; padding: 0;" srcdoc='{html}'></iframe>""" |