Source code for dynamicgem.evaluation.visualize_embedding

import os
disp_avlbl = True
if os.name == 'posix' and 'DISPLAY' not in os.environ:
    disp_avlbl = False
    import matplotlib
    matplotlib.use('Agg')
import matplotlib.pyplot as plt
import networkx as nx
from sklearn.manifold import TSNE

import sys

sys.path.insert(0, './')
from dynamicgem.utils import plot_util

from matplotlib import rc
import seaborn

font = {'family': 'serif', 'serif': ['computer modern roman']}
rc('text', usetex=True)
rc('font', weight='bold')
rc('font', size=20)
rc('lines', markersize=10)
rc('xtick', labelsize=12)
rc('ytick', labelsize=12)
rc('axes', labelsize='x-large')
rc('axes', labelweight='bold')
rc('axes', titlesize='x-large')
rc('axes', linewidth=3)
plt.rc('font', **font)
seaborn.set_style("darkgrid")


[docs]def plot_embedding2D(node_pos, node_colors=None, di_graph=None): """Function to plot the embedding in two dimension using TSNE to reduce the dimension""" node_num, embedding_dimension = node_pos.shape if (embedding_dimension > 2): print("Embedding dimension greater than 2, use tSNE to reduce it to 2") model = TSNE(n_components=2) node_pos = model.fit_transform(node_pos) if di_graph is None: # plot using plt scatter plt.scatter(node_pos[:, 0], node_pos[:, 1], c=node_colors) else: # plot using networkx with edge structure pos = {} for i in range(node_num): pos[i] = node_pos[i, :] if node_colors: nodes_draw = nx.draw_networkx_nodes(di_graph, pos, node_color=node_colors, width=0.1, node_size=40, arrows=False, alpha=0.8, font_size=5) nodes_draw.set_edgecolor('w') else: nodes_draw = nx.draw_networkx(di_graph, pos, node_color=node_colors, width=0.1, node_size=40, arrows=False, alpha=0.8, font_size=12) nodes_draw.set_edgecolor('w')
[docs]def expVis(X, res_pre, m_summ, node_labels=None, di_graph=None): """Function to perform visualixe the experiments of dynamic graph""" print('\tGraph Visualization:') if node_labels: node_colors = plot_util.get_node_color(node_labels) else: node_colors = None plot_embedding2D(X, node_colors=node_colors, di_graph=di_graph) plt.savefig('%s_%s_vis.pdf' % (res_pre, m_summ), dpi=300, format='pdf', bbox_inches='tight') plt.figure()
[docs]def plot_single_step(node_pos, graph_info, dyn_changed_node): """Function to plot a single step""" node_colors = plot_util.get_node_color(graph_info[1]) node_num, embedding_dimension = node_pos.shape pos = {} for i in range(node_num): pos[i] = node_pos[i, :] unchanged_nodes = list(set(range(node_num)) - set(dyn_changed_node)) nodes_draw = nx.draw_networkx_nodes(graph_info[0], pos, nodelist=unchanged_nodes, node_color=[node_colors[p] for p in unchanged_nodes], node_size=40, with_labels=False) nodes_draw.set_edgecolor('w') nodes_draw = nx.draw_networkx_nodes(graph_info[0], pos, nodelist=dyn_changed_node, node_color='r', node_size=80, with_labels=False)
# nodes_draw.set_edgecolor('k')
[docs]def plot_static_sbm_embedding(nodes_pos_list, dynamic_sbm_series): """Function to plot the static sbm embedding""" length = len(dynamic_sbm_series) node_num, dimension = nodes_pos_list[0].shape if dimension > 2: print("Embedding dimension greater than 2, using tSNE to reduce it to 2") model = TSNE(n_components=2, random_state=42) nodes_pos_list = [model.fit_transform(X) for X in nodes_pos_list] pos = 1 plt.figure() for t in range(length): plt.subplot(220 + pos) pos += 1 plot_single_step(nodes_pos_list[t], dynamic_sbm_series[t], dynamic_sbm_series[t][3]) plt.show()