Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -3,9 +3,10 @@ import matplotlib.pyplot as plt
|
|
3 |
import networkx as nx
|
4 |
|
5 |
# Add a sidebar with options
|
6 |
-
sidebar_option = st.sidebar.radio("Select an option",
|
|
|
7 |
|
8 |
-
# Function to display properties and graph
|
9 |
def display_graph_properties(G):
|
10 |
# Initialize a list for path lengths
|
11 |
pathlengths = []
|
@@ -50,25 +51,64 @@ def display_graph_properties(G):
|
|
50 |
nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold')
|
51 |
st.pyplot(plt)
|
52 |
|
53 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
if sidebar_option == "Basic: Properties":
|
55 |
-
# Set the title for the page
|
56 |
st.title("Basic: Properties")
|
57 |
-
|
58 |
-
# Add a radio button for selecting the graph type
|
59 |
option = st.radio("Choose a graph type:", ("Default Example", "Create your own"))
|
60 |
|
61 |
-
# Default example
|
62 |
if option == "Default Example":
|
63 |
G = nx.lollipop_graph(4, 6)
|
64 |
display_graph_properties(G)
|
65 |
|
66 |
# Create your own graph
|
67 |
elif option == "Create your own":
|
68 |
-
# Let the user input number of nodes and edges
|
69 |
num_nodes = st.number_input("Number of nodes:", min_value=2, max_value=50, value=5)
|
70 |
num_edges = st.number_input("Number of edges per group (for lollipop graph):", min_value=1, max_value=10, value=3)
|
71 |
|
72 |
if num_nodes >= 2 and num_edges >= 1:
|
73 |
-
|
74 |
-
display_graph_properties(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
import networkx as nx
|
4 |
|
5 |
# Add a sidebar with options
|
6 |
+
sidebar_option = st.sidebar.radio("Select an option",
|
7 |
+
["Select an option", "Basic: Properties", "Basic: Read and write graphs"])
|
8 |
|
9 |
+
# Function to display properties and graph for Basic: Properties
|
10 |
def display_graph_properties(G):
|
11 |
# Initialize a list for path lengths
|
12 |
pathlengths = []
|
|
|
51 |
nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold')
|
52 |
st.pyplot(plt)
|
53 |
|
54 |
+
# Function to display graph for Basic: Read and write graphs
|
55 |
+
def display_read_write_graph(G):
|
56 |
+
# Print the adjacency list of the graph
|
57 |
+
st.write("### Adjacency List:")
|
58 |
+
for line in nx.generate_adjlist(G):
|
59 |
+
st.write(line)
|
60 |
+
|
61 |
+
# Write the graph's edge list to a file
|
62 |
+
st.write("### Writing Edge List to 'grid.edgelist' file:")
|
63 |
+
nx.write_edgelist(G, path="grid.edgelist", delimiter=":")
|
64 |
+
st.write("Edge list written to 'grid.edgelist'")
|
65 |
+
|
66 |
+
# Read the graph from the edge list
|
67 |
+
st.write("### Reading Edge List from 'grid.edgelist' file:")
|
68 |
+
H = nx.read_edgelist(path="grid.edgelist", delimiter=":")
|
69 |
+
st.write("Edge list read into graph H")
|
70 |
+
|
71 |
+
# Visualize the graph
|
72 |
+
st.write("### Graph Visualization:")
|
73 |
+
pos = nx.spring_layout(H, seed=200) # Seed for reproducibility
|
74 |
+
plt.figure(figsize=(8, 6))
|
75 |
+
nx.draw(H, pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold')
|
76 |
+
st.pyplot(plt)
|
77 |
+
|
78 |
+
# Display Basic: Properties if selected
|
79 |
if sidebar_option == "Basic: Properties":
|
|
|
80 |
st.title("Basic: Properties")
|
|
|
|
|
81 |
option = st.radio("Choose a graph type:", ("Default Example", "Create your own"))
|
82 |
|
83 |
+
# Default example: 5x5 grid graph
|
84 |
if option == "Default Example":
|
85 |
G = nx.lollipop_graph(4, 6)
|
86 |
display_graph_properties(G)
|
87 |
|
88 |
# Create your own graph
|
89 |
elif option == "Create your own":
|
|
|
90 |
num_nodes = st.number_input("Number of nodes:", min_value=2, max_value=50, value=5)
|
91 |
num_edges = st.number_input("Number of edges per group (for lollipop graph):", min_value=1, max_value=10, value=3)
|
92 |
|
93 |
if num_nodes >= 2 and num_edges >= 1:
|
94 |
+
G_custom = nx.lollipop_graph(num_nodes, num_edges)
|
95 |
+
display_graph_properties(G_custom)
|
96 |
+
|
97 |
+
# Display Basic: Read and write graphs if selected
|
98 |
+
elif sidebar_option == "Basic: Read and write graphs":
|
99 |
+
st.title("Basic: Read and write graphs")
|
100 |
+
option = st.radio("Choose a graph type:", ("Default Example", "Create your own"))
|
101 |
+
|
102 |
+
# Default example: 5x5 grid graph
|
103 |
+
if option == "Default Example":
|
104 |
+
G = nx.grid_2d_graph(5, 5) # 5x5 grid
|
105 |
+
display_read_write_graph(G)
|
106 |
+
|
107 |
+
# Create your own graph
|
108 |
+
elif option == "Create your own":
|
109 |
+
rows = st.number_input("Number of rows:", min_value=2, max_value=20, value=5)
|
110 |
+
cols = st.number_input("Number of columns:", min_value=2, max_value=20, value=5)
|
111 |
+
|
112 |
+
if rows >= 2 and cols >= 2:
|
113 |
+
G_custom = nx.grid_2d_graph(rows, cols)
|
114 |
+
display_read_write_graph(G_custom)
|