File size: 1,478 Bytes
38f979d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
46
47
48
49
50
import streamlit as st
import matplotlib.pyplot as plt
import networkx as nx

# Create lollipop graph
G = nx.lollipop_graph(4, 6)

# Initialize a list for path lengths
pathlengths = []

# Display the source-target shortest path lengths
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])

# Calculate and display the average shortest path length
avg_path_length = sum(pathlengths) / len(pathlengths)
st.write(f"### Average shortest path length: {avg_path_length}")

# Calculate and display the distribution of path lengths
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")

# Display the graph metrics
st.write(f"### Graph Metrics")
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)}")

# Visualize the graph
st.write("### Graph Visualization")
pos = nx.spring_layout(G, seed=3068)  # Seed layout for reproducibility
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)