如何解决基于标签聚类的networkx颜色
我有一个链接基础数据,我为它们每个都做了聚类标签,数据看起来像这样:id_1和id_2相互链接,标签是每个链接的簇号。
id_1,id_2,label
0,18427,1
1,21708,22208,22171,6829,16590,20135,8894,15785,10281,1
etc..
我使用networkx
库绘制它们之间的线。
是否有一种像我们在seaborn
库中一样基于群集标签为数据节点着色的方法?
解决方法
nx.draw
有很多参数,可让您自定义生成的图。在这种情况下,您要设置一个取决于edge_color
属性的label
。我在这里对labels
进行了一些修改,以更好地说明这一点。
为重现您的示例,我从边缘列表生成了一个图表,作为熊猫数据框,这非常简单。由于设置了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,22208,3
1,22171,4
1,6829,16590,2
1,20135,8894,15785,10281,2
''')
df = pd.read_csv(s,delim_whitespace=False,sep=',')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。