-
Notifications
You must be signed in to change notification settings - Fork 2
/
graph_visualization.py
53 lines (46 loc) · 1.52 KB
/
graph_visualization.py
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
51
52
53
import random, math, params, robot_handler, enum
import problem6_variedgraphcollection as varied_graphs
import igraph as ig
import matplotlib.pyplot as plt
# script to just display the graph, not any robot's path through it
# Construct the graph from the adj matrix
n_vertices = params.num_nodes
edges = []
# robot_handler.generate()
robot_handler.generate_graph(0,0.5)
# print(robot_handler.adj_grid)
for i in range(n_vertices):
for j in range(n_vertices):
if robot_handler.adj_grid[i][j] == 1 and i > j:
new_edge = (i, j)
edges.append(new_edge)
# print(edges)
g = ig.Graph(n_vertices, edges)
# Set attributes for the graph, nodes, and edges
g["title"] = "C-SLAM Visualization"
names = ["entry node 0"]
for i in range(n_vertices-1):
names.append("node" + str(i+1))
g.vs["name"] = names
# Plot in matplotlib
# Note that attributes can be set globally (e.g. vertex_size), or set individually using arrays (e.g. vertex_color)
fig, ax = plt.subplots(figsize=(5,5))
ig.plot(
g,
target=ax,
layout="circle", # print nodes in a circular layout
vertex_size=0.1,
# vertex_color=ig.RainbowPalette(4).get(),
vertex_color="steelblue",
vertex_frame_width=4.0,
vertex_frame_color="white",
vertex_label=g.vs["name"],
vertex_label_size=7.0
)
# for each edge between the nodes it mapped, make it a different color
plt.show()
# Save the graph as an image file
fig.savefig('graph.png')
# Export and import a graph as a GML file.
g.save("social_network.gml")
g = ig.load("social_network.gml")