-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkcore.py
More file actions
59 lines (42 loc) · 1.96 KB
/
Copy pathkcore.py
File metadata and controls
59 lines (42 loc) · 1.96 KB
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
54
55
56
57
58
59
# ---------- XARXES COMPLEXES --------------
# -------------- K_CORE --------------------
# ----------- ALBERT PLAZAS ----------------
############# Librerias ################
import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
import sys
import os
############# Argumentos ################
filename = sys.argv[1] # Guardar el nombre del archivo de datos
########## Programa principal ###########
G = nx.read_edgelist(filename) # Leer la red
filename = filename.split('/')[-1].split('.')[0] # Nombre del archivo sin la ruta ni la extensión
os.makedirs(f'plots/kcore/{filename}', exist_ok=True) # Crear carpeta para guardar los plots
# Calcular el core number de los nodos
core_number = nx.core_number(G)
# Obtener los diferentes niveles de k-core
k_levels = sorted(set(core_number.values()))
# Crear una posición para los nodos basada en capas concéntricas
pos = {}
layer_distance = 1.0 # Distancia entre capas
theta_offset = np.pi / 6 # Desplazamiento angular entre capas
for k in k_levels:
nodes_in_k_core = [n for n, v in core_number.items() if v == k]
angle_step = 2 * np.pi / len(nodes_in_k_core) if nodes_in_k_core else 2 * np.pi
radius = layer_distance * (max(k_levels) - k + 1)
for i, node in enumerate(nodes_in_k_core):
theta = i * angle_step + theta_offset * k
pos[node] = (radius * np.cos(theta), radius * np.sin(theta))
# Definir colores para cada capa de k-core
colors = plt.cm.rainbow(np.linspace(0, 1, len(k_levels)))
############# Plots ################
plt.figure(figsize=(12, 12))
for i, k in enumerate(k_levels):
nodes_in_k_core = [n for n, v in core_number.items() if v == k]
nx.draw_networkx_nodes(G, pos, nodelist=nodes_in_k_core, node_size=20, label=f'k={k}', node_color=colors[i],edgecolors='black')
# nx.draw_networkx_edges(G, pos, alpha=0.5)
# nx.draw_networkx_labels(G, pos, font_size=8)
# plt.title('k-core de la red con capas')
# plt.legend()
plt.savefig(f'plots/kcore/{filename}/kcore.png')