基于Label聚类的networkx颜色
networkx color based on Label clustering
我有一个 link 基础数据,我为每个数据做了聚类标签,数据如下所示:id_1 和 id_2 是 linked彼此之间,标签是每个 link.
的簇号
id_1,id_2,label
0,18427,1
1,21708,1
1,22208,1
1,22171,1
1,6829,1
1,16590,1
1,20135,1
1,8894,1
1,15785,1
1,10281,1
etc..
我使用 networkx
库来绘制它们之间的线。
有没有办法像我们在 seaborn
库中那样根据集群标签为数据节点着色?
nx.draw
有很多参数可以让您自定义生成的图。在这种情况下,您想要设置一个依赖于 label
属性的 edge_color
。我在这里稍微修改了 labels
以更好地说明这一点。
为了重现您的示例,我从边缘列表生成了图形作为 pandas 数据框,这使得它非常简单。因为我设置了 edge_attr=True
,label
将是一个属性。因此,我们可以使用 nx.get_edge_attributes
.
将其保存为字典
然后我们可以使用 edge_color=list(labels.values())
设置边缘颜色,选择 cmap
并绘制图形如下:
import matplotlib.cm as cm
from matplotlib import pyplot as plt
G = nx.from_pandas_edgelist(df, source='id_1', target='id_2', edge_attr=True)
cmap = cm.get_cmap('viridis', max(labels.values()))
labels = nx.get_edge_attributes(G, 'label')
plt.figure(figsize=(8,6))
nx.draw(G, with_labels=True,
edgelist=list(labels.keys()),
edge_color=list(labels.values()),
edge_cmap= plt.cm.summer,
node_color='lightgreen',
node_size=1000, width=2)
设置-
s = StringIO('''
id_1,id_2,label
0,18427,1
1,21708,1
1,22208,3
1,22171,4
1,6829,1
1,16590,2
1,20135,3
1,8894,2
1,15785,2
1,10281,2
''')
df = pd.read_csv(s, delim_whitespace=False, sep=',')
我有一个 link 基础数据,我为每个数据做了聚类标签,数据如下所示:id_1 和 id_2 是 linked彼此之间,标签是每个 link.
的簇号id_1,id_2,label
0,18427,1
1,21708,1
1,22208,1
1,22171,1
1,6829,1
1,16590,1
1,20135,1
1,8894,1
1,15785,1
1,10281,1
etc..
我使用 networkx
库来绘制它们之间的线。
有没有办法像我们在 seaborn
库中那样根据集群标签为数据节点着色?
nx.draw
有很多参数可以让您自定义生成的图。在这种情况下,您想要设置一个依赖于 label
属性的 edge_color
。我在这里稍微修改了 labels
以更好地说明这一点。
为了重现您的示例,我从边缘列表生成了图形作为 pandas 数据框,这使得它非常简单。因为我设置了 edge_attr=True
,label
将是一个属性。因此,我们可以使用 nx.get_edge_attributes
.
然后我们可以使用 edge_color=list(labels.values())
设置边缘颜色,选择 cmap
并绘制图形如下:
import matplotlib.cm as cm
from matplotlib import pyplot as plt
G = nx.from_pandas_edgelist(df, source='id_1', target='id_2', edge_attr=True)
cmap = cm.get_cmap('viridis', max(labels.values()))
labels = nx.get_edge_attributes(G, 'label')
plt.figure(figsize=(8,6))
nx.draw(G, with_labels=True,
edgelist=list(labels.keys()),
edge_color=list(labels.values()),
edge_cmap= plt.cm.summer,
node_color='lightgreen',
node_size=1000, width=2)
设置-
s = StringIO('''
id_1,id_2,label
0,18427,1
1,21708,1
1,22208,3
1,22171,4
1,6829,1
1,16590,2
1,20135,3
1,8894,2
1,15785,2
1,10281,2
''')
df = pd.read_csv(s, delim_whitespace=False, sep=',')