shukdevdatta123 commited on
Commit
580e1c2
·
verified ·
1 Parent(s): 6bb529c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +101 -1
app.py CHANGED
@@ -13,7 +13,8 @@ sidebar_option = st.sidebar.radio("Select an option",
13
  "Drawing: Cluster Layout", "Drawing: Degree Analysis",
14
  "Drawing: Ego Graph", "Drawing: Eigenvalues", "Drawing: Four Grids",
15
  "Drawing: House With Colors", "Drawing: Labels And Colors",
16
- "Drawing: Multipartite Layout", "Drawing: Node Colormap"])
 
17
 
18
 
19
  # Helper function to draw and display graph
@@ -22,6 +23,105 @@ def draw_graph(G, pos=None, title="Graph Visualization"):
22
  nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold')
23
  st.pyplot(plt)
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  # Function to display Drawing: Node Colormap
26
  def display_node_colormap():
27
  st.title("Drawing: Node Colormap")
 
13
  "Drawing: Cluster Layout", "Drawing: Degree Analysis",
14
  "Drawing: Ego Graph", "Drawing: Eigenvalues", "Drawing: Four Grids",
15
  "Drawing: House With Colors", "Drawing: Labels And Colors",
16
+ "Drawing: Multipartite Layout", "Drawing: Node Colormap",
17
+ "Drawing: Rainbow Coloring"])
18
 
19
 
20
  # Helper function to draw and display graph
 
23
  nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=500, font_size=10, font_weight='bold')
24
  st.pyplot(plt)
25
 
26
+ # Function to display Drawing: Rainbow Coloring
27
+ def display_rainbow_coloring():
28
+ st.title("Drawing: Rainbow Coloring")
29
+
30
+ option = st.radio("Choose a graph type:", ("Default Example", "Create your own"))
31
+
32
+ if option == "Default Example":
33
+ # Rainbow Coloring with default parameters
34
+ node_dist_to_color = {
35
+ 1: "tab:red",
36
+ 2: "tab:orange",
37
+ 3: "tab:olive",
38
+ 4: "tab:green",
39
+ 5: "tab:blue",
40
+ 6: "tab:purple",
41
+ }
42
+
43
+ nnodes = 13
44
+ G = nx.complete_graph(nnodes)
45
+
46
+ n = (nnodes - 1) // 2
47
+ ndist_iter = list(range(1, n + 1))
48
+ ndist_iter += ndist_iter[::-1]
49
+
50
+ def cycle(nlist, n):
51
+ return nlist[-n:] + nlist[:-n]
52
+
53
+ nodes = list(G.nodes())
54
+ for i, nd in enumerate(ndist_iter):
55
+ for u, v in zip(nodes, cycle(nodes, i + 1)):
56
+ G[u][v]["color"] = node_dist_to_color[nd]
57
+
58
+ pos = nx.circular_layout(G)
59
+ # Create a figure with 1:1 aspect ratio to preserve the circle.
60
+ fig, ax = plt.subplots(figsize=(8, 8))
61
+ node_opts = {"node_size": 500, "node_color": "w", "edgecolors": "k", "linewidths": 2.0}
62
+ nx.draw_networkx_nodes(G, pos, **node_opts)
63
+ nx.draw_networkx_labels(G, pos, font_size=14)
64
+ # Extract color from edge data
65
+ edge_colors = [edgedata["color"] for _, _, edgedata in G.edges(data=True)]
66
+ nx.draw_networkx_edges(G, pos, width=2.0, edge_color=edge_colors)
67
+
68
+ ax.set_axis_off()
69
+ fig.tight_layout()
70
+ st.pyplot(plt)
71
+
72
+ elif option == "Create your own":
73
+ nnodes = st.number_input("Number of nodes:", min_value=2, max_value=50, value=13)
74
+
75
+ # Allow users to create their own color map
76
+ red = st.color_picker("Select a color for Red (1)", "#ff0000")
77
+ orange = st.color_picker("Select a color for Orange (2)", "#ff7f00")
78
+ olive = st.color_picker("Select a color for Olive (3)", "#808000")
79
+ green = st.color_picker("Select a color for Green (4)", "#008000")
80
+ blue = st.color_picker("Select a color for Blue (5)", "#0000ff")
81
+ purple = st.color_picker("Select a color for Purple (6)", "#800080")
82
+
83
+ node_dist_to_color = {
84
+ 1: red,
85
+ 2: orange,
86
+ 3: olive,
87
+ 4: green,
88
+ 5: blue,
89
+ 6: purple,
90
+ }
91
+
92
+ if st.button("Generate Graph"):
93
+ G = nx.complete_graph(nnodes)
94
+
95
+ n = (nnodes - 1) // 2
96
+ ndist_iter = list(range(1, n + 1))
97
+ ndist_iter += ndist_iter[::-1]
98
+
99
+ def cycle(nlist, n):
100
+ return nlist[-n:] + nlist[:-n]
101
+
102
+ nodes = list(G.nodes())
103
+ for i, nd in enumerate(ndist_iter):
104
+ for u, v in zip(nodes, cycle(nodes, i + 1)):
105
+ G[u][v]["color"] = node_dist_to_color[nd]
106
+
107
+ pos = nx.circular_layout(G)
108
+ # Create a figure with 1:1 aspect ratio to preserve the circle.
109
+ fig, ax = plt.subplots(figsize=(8, 8))
110
+ node_opts = {"node_size": 500, "node_color": "w", "edgecolors": "k", "linewidths": 2.0}
111
+ nx.draw_networkx_nodes(G, pos, **node_opts)
112
+ nx.draw_networkx_labels(G, pos, font_size=14)
113
+ # Extract color from edge data
114
+ edge_colors = [edgedata["color"] for _, _, edgedata in G.edges(data=True)]
115
+ nx.draw_networkx_edges(G, pos, width=2.0, edge_color=edge_colors)
116
+
117
+ ax.set_axis_off()
118
+ fig.tight_layout()
119
+ st.pyplot(plt)
120
+
121
+ # Display Drawing: Rainbow Coloring if selected
122
+ if sidebar_option == "Drawing: Rainbow Coloring":
123
+ display_rainbow_coloring()
124
+
125
  # Function to display Drawing: Node Colormap
126
  def display_node_colormap():
127
  st.title("Drawing: Node Colormap")