|
import streamlit as st |
|
import matplotlib.pyplot as plt |
|
import networkx as nx |
|
|
|
|
|
sidebar_option = st.sidebar.radio("Select an option", ["Select an option", "Basic: Properties"]) |
|
|
|
|
|
def display_graph_properties(G): |
|
|
|
pathlengths = [] |
|
|
|
|
|
st.write("### Source vertex {target:length, }") |
|
for v in G.nodes(): |
|
spl = dict(nx.single_source_shortest_path_length(G, v)) |
|
st.write(f"Vertex {v}: {spl}") |
|
for p in spl: |
|
pathlengths.append(spl[p]) |
|
|
|
|
|
avg_path_length = sum(pathlengths) / len(pathlengths) |
|
st.write(f"### Average shortest path length: {avg_path_length}") |
|
|
|
|
|
dist = {} |
|
for p in pathlengths: |
|
if p in dist: |
|
dist[p] += 1 |
|
else: |
|
dist[p] = 1 |
|
|
|
st.write("### Length #paths") |
|
for d in sorted(dist.keys()): |
|
st.write(f"Length {d}: {dist[d]} paths") |
|
|
|
|
|
st.write("### Properties") |
|
st.write(f"Radius: {nx.radius(G)}") |
|
st.write(f"Diameter: {nx.diameter(G)}") |
|
st.write(f"Eccentricity: {nx.eccentricity(G)}") |
|
st.write(f"Center: {nx.center(G)}") |
|
st.write(f"Periphery: {nx.periphery(G)}") |
|
st.write(f"Density: {nx.density(G)}") |
|
|
|
|
|
st.write("### Graph Visualization") |
|
pos = nx.spring_layout(G, seed=3068) |
|
plt.figure(figsize=(8, 6)) |
|
nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold') |
|
st.pyplot(plt) |
|
|
|
|
|
if sidebar_option == "Basic: Properties": |
|
|
|
st.title("Basic: Properties") |
|
|
|
|
|
option = st.radio("Choose a graph type:", ("Default Example", "Create your own")) |
|
|
|
|
|
if option == "Default Example": |
|
G = nx.lollipop_graph(4, 6) |
|
display_graph_properties(G) |
|
|
|
|
|
elif option == "Create your own": |
|
|
|
num_nodes = st.number_input("Number of nodes:", min_value=2, max_value=50, value=5) |
|
num_edges = st.number_input("Number of edges per group (for lollipop graph):", min_value=1, max_value=10, value=3) |
|
|
|
if num_nodes >= 2 and num_edges >= 1: |
|
G = nx.lollipop_graph(num_nodes, num_edges) |
|
display_graph_properties(G) |
|
|