shukdevdatta123 commited on
Commit
2ed267a
·
verified ·
1 Parent(s): c85e1c3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -39
app.py CHANGED
@@ -20,18 +20,30 @@ def draw_graph(G, pos=None, title="Graph Visualization"):
20
  nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold')
21
  st.pyplot(plt)
22
 
23
- # Function for creating and drawing a multipartite graph
24
  def multilayered_graph(*subset_sizes):
25
- extents = nx.utils.pairwise(it.accumulate((0,) + subset_sizes))
26
- layers = [range(start, end) for start, end in extents]
27
  G = nx.Graph()
28
- for i, layer in enumerate(layers):
29
- G.add_nodes_from(layer, layer=i)
30
- for layer1, layer2 in nx.utils.pairwise(layers):
31
- G.add_edges_from(it.product(layer1, layer2))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  return G
33
 
34
- # Function to display Drawing: Multipartite Layout
35
  def display_multipartite_layout():
36
  st.title("Drawing: Multipartite Layout")
37
 
@@ -64,25 +76,27 @@ def display_multipartite_layout():
64
  subset_colors_input = st.text_area("Enter subset colors (comma-separated, e.g., gold,violet,green):", value="gold,violet,violet,violet,violet,limegreen,limegreen,darkorange")
65
  subset_colors = subset_colors_input.split(',')
66
 
67
- # Validate input
68
- if len(subset_sizes) == len(subset_colors):
69
- # Generate and plot multipartite graph
70
- G = multilayered_graph(*subset_sizes)
71
- color = [subset_colors[data["layer"]] for v, data in G.nodes(data=True)]
72
- pos = nx.multipartite_layout(G, subset_key="layer")
73
-
74
- plt.figure(figsize=(8, 8))
75
- nx.draw(G, pos, node_color=color, with_labels=False)
76
- plt.axis("equal")
77
- st.pyplot(plt)
78
- else:
79
  st.error("The number of colors should match the number of subsets.")
 
 
 
 
 
 
 
 
 
 
 
 
80
 
81
  # Display Drawing: Multipartite Layout if selected
82
  if sidebar_option == "Drawing: Multipartite Layout":
83
  display_multipartite_layout()
84
 
85
- # Function to display Drawing: Labels And Colors
86
  def display_labels_and_colors():
87
  st.title("Drawing: Labels And Colors")
88
 
@@ -135,29 +149,31 @@ def display_labels_and_colors():
135
  edges = st.text_area("Enter edges (format: node1-node2, comma-separated, e.g., a-b,b-c):", value="a-b,b-c,c-d")
136
  edge_list = [tuple(edge.split('-')) for edge in edges.split(',')]
137
 
138
- # Generate graph based on user input
139
- G_custom = nx.Graph()
140
- G_custom.add_nodes_from(node_labels)
141
- G_custom.add_edges_from(edge_list)
142
-
143
  # Let user choose colors for nodes and edges
144
  node_color = st.color_picker("Pick a color for nodes:", "#FF6347")
145
  edge_color = st.color_picker("Pick a color for edges:", "#4682B4")
146
-
147
- # Generate layout for the nodes
148
- pos_custom = nx.spring_layout(G_custom)
149
 
150
- # Draw the graph
151
- nx.draw_networkx_nodes(G_custom, pos_custom, node_color=node_color, node_size=800, edgecolors="gray", alpha=0.9)
152
- nx.draw_networkx_edges(G_custom, pos_custom, edge_color=edge_color, width=2, alpha=0.7)
153
-
154
- # Create custom labels
155
- custom_labels = {node: f"${node}$" for node in node_labels}
156
- nx.draw_networkx_labels(G_custom, pos_custom, labels=custom_labels, font_size=22, font_color="whitesmoke")
157
 
158
- plt.tight_layout()
159
- plt.axis("off")
160
- st.pyplot(plt)
 
 
 
 
 
 
 
 
 
 
 
161
 
162
  # Display Drawing: Labels And Colors if selected
163
  if sidebar_option == "Drawing: Labels And Colors":
 
20
  nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold')
21
  st.pyplot(plt)
22
 
23
+ # Function to create a multipartite graph
24
  def multilayered_graph(*subset_sizes):
 
 
25
  G = nx.Graph()
26
+ layers = len(subset_sizes)
27
+ node_id = 0
28
+
29
+ # Create nodes for each subset and add edges between nodes in adjacent layers
30
+ for i, size in enumerate(subset_sizes):
31
+ for j in range(size):
32
+ G.add_node(node_id, layer=i) # Assign a layer attribute
33
+ node_id += 1
34
+
35
+ # Add edges between nodes in adjacent layers
36
+ node_ids = list(G.nodes())
37
+ for i in range(layers - 1):
38
+ layer_nodes = [node for node in node_ids if G.nodes[node]["layer"] == i]
39
+ next_layer_nodes = [node for node in node_ids if G.nodes[node]["layer"] == i + 1]
40
+ for node in layer_nodes:
41
+ for next_node in next_layer_nodes:
42
+ G.add_edge(node, next_node)
43
+
44
  return G
45
 
46
+ # Function to display Multipartite Layout
47
  def display_multipartite_layout():
48
  st.title("Drawing: Multipartite Layout")
49
 
 
76
  subset_colors_input = st.text_area("Enter subset colors (comma-separated, e.g., gold,violet,green):", value="gold,violet,violet,violet,violet,limegreen,limegreen,darkorange")
77
  subset_colors = subset_colors_input.split(',')
78
 
79
+ # Check if the number of colors matches the number of subsets
80
+ if len(subset_sizes) != len(subset_colors):
 
 
 
 
 
 
 
 
 
 
81
  st.error("The number of colors should match the number of subsets.")
82
+ else:
83
+ # Add a button to generate the graph
84
+ if st.button("Generate Graph"):
85
+ # Generate and plot multipartite graph
86
+ G = multilayered_graph(*subset_sizes)
87
+ color = [subset_colors[data["layer"]] for v, data in G.nodes(data=True)]
88
+ pos = nx.multipartite_layout(G, subset_key="layer")
89
+
90
+ plt.figure(figsize=(8, 8))
91
+ nx.draw(G, pos, node_color=color, with_labels=False)
92
+ plt.axis("equal")
93
+ st.pyplot(plt)
94
 
95
  # Display Drawing: Multipartite Layout if selected
96
  if sidebar_option == "Drawing: Multipartite Layout":
97
  display_multipartite_layout()
98
 
99
+ # Function to display Labels and Colors
100
  def display_labels_and_colors():
101
  st.title("Drawing: Labels And Colors")
102
 
 
149
  edges = st.text_area("Enter edges (format: node1-node2, comma-separated, e.g., a-b,b-c):", value="a-b,b-c,c-d")
150
  edge_list = [tuple(edge.split('-')) for edge in edges.split(',')]
151
 
 
 
 
 
 
152
  # Let user choose colors for nodes and edges
153
  node_color = st.color_picker("Pick a color for nodes:", "#FF6347")
154
  edge_color = st.color_picker("Pick a color for edges:", "#4682B4")
 
 
 
155
 
156
+ # Add a button to generate the graph
157
+ if st.button("Generate Graph"):
158
+ # Generate graph based on user input
159
+ G_custom = nx.Graph()
160
+ G_custom.add_nodes_from(node_labels)
161
+ G_custom.add_edges_from(edge_list)
 
162
 
163
+ # Generate layout for the nodes
164
+ pos_custom = nx.spring_layout(G_custom)
165
+
166
+ # Draw the graph
167
+ nx.draw_networkx_nodes(G_custom, pos_custom, node_color=node_color, node_size=800, edgecolors="gray", alpha=0.9)
168
+ nx.draw_networkx_edges(G_custom, pos_custom, edge_color=edge_color, width=2, alpha=0.7)
169
+
170
+ # Create custom labels
171
+ custom_labels = {node: f"${node}$" for node in node_labels}
172
+ nx.draw_networkx_labels(G_custom, pos_custom, labels=custom_labels, font_size=22, font_color="whitesmoke")
173
+
174
+ plt.tight_layout()
175
+ plt.axis("off")
176
+ st.pyplot(plt)
177
 
178
  # Display Drawing: Labels And Colors if selected
179
  if sidebar_option == "Drawing: Labels And Colors":