k核分解中加入标签信息

Adding labels information in k-core decomposition

我需要在提取 kcore 信息的网络中可视化标签。 数据集是

Source  Target  Edge_Weight Label_Source    Label_Target
0   A   F         29.1  0.0 0.0
1   A   G         46.9  0.0 1.0
2   A   B         24.4  0.0 1.0
3   C   F         43.4  0.0 0.0
4   C   N         23.3  0.0 1.0
5   D   S         18.0  1.0 0.0
6   D   G         67.6  1.0 0.0
7   D   B         37.2  1.0 1.0
8   D   E         46.9  1.0 2.0

为了提取 kcore 信息,我使用了代码

G = nx.from_pandas_edgelist(df, 'Source', 'Target')

kcore=nx.k_core(G)

plt.subplot(122)
nx.draw(kcore)

plt.show()

你知道我可以添加标签信息吗? 我的预期值将是一个图表,该图表具有基于标签的颜色(分配给不同标签值的颜色无关紧要。值是 0、1、2)。

非常感谢

做你想做的事情的一种方法是创建一个颜色图并将它关联到你的节点标签。然后,您可以使用 nx.draw 函数中的 node_colors 参数来设置节点的颜色。此外,您可以使用 plt.scatter 创建空图,为图表中的标签设置图例。

查看下面的代码:

import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import cm

df=pd.read_fwf('graph.txt') #Stored your dataset in a file called 'graph.txt'
G = nx.from_pandas_edgelist(df, 'Source', 'Target')
kcore=nx.k_core(G)
N_colors=3
cm_dis=np.linspace(0, 1,N_colors) 
colors = [cm.viridis(x) for x in cm_dis]
color_nodes=[]

for node in kcore:
    #Finding out label of the node
    temp_src=df.index[df['Source'] == node].tolist()
    temp_targ=df.index[df['Target']==node].tolist()

    if len(temp_targ)!=0:
      label=df['Label_Target'][temp_targ[0]]
      color=colors[int(label)]
    elif len(temp_src)!=0:
      label=df['Label_Source'][temp_src[0]]
      color=colors[int(label)]
    
    #Setting up legend
    if color not in color_nodes:
      plt.scatter([],[],color=color,label=str(label))

    color_nodes.append(color)

#Draw graph
nx.draw(kcore,with_labels=True,node_color=color_nodes)
plt.legend()
plt.show()

并且输出给出: