如何解决使用聚类标签作为配色方案绘制Networkx有向图
我需要帮助来绘制networkx有向图。我有一个有向图,它是根据一个数据帧创建的,如下所示:
source target weight
ip_1 ip_2 3
ip_1 ip_3 6
ip_4 ip_3 7
.
.
.
然后,在使用Node2Vec将节点转换为嵌入后,我使用肘部+ kmeans对该图进行了聚类:
https://github.com/eliorc/node2vec
最后,我得到了这个结果数据框:
source target weight source_kmeans_label target_kmeans_label elbow_optimal_k
ip_1 ip_2 3 0 1 12
ip_1 ip_3 6 2 0 12
ip_4 ip_3 7 0 3 12
.
.
.
我想根据肘值使用不同的颜色来可视化(绘制)该图(源,目标,重量);因此对于上面的示例,我将使用12种不同的颜色。非常感谢您为实现这一目标所提供的帮助。
解决方法
您可以使用seaborn palette生成12种不同的RGB颜色值,然后根据权重值在数据框中创建一个名为color的列:
import seaborn as sns
import networkx as nx
from pyvis.network import Network
palette = sns.color_palette("husl",n_colors=12) # n_colors is your elbow value
假设您的数据帧称为df,则可以基于color
列添加新列weight
,如下所示:
df['color'] = df.apply(lambda row: palette[row['weight'] - 1],axis=1)
现在每个边都有一个RGB值,首先需要从数据框中制作图形,然后可以使用pyvis
来可视化图形:
G = nx.from_pandas_edgelist(df,'source','target',edge_attr='color',create_using=nx.DiGraph())
N = Network(height='100%',width='100%',bgcolor='white',font_color='black',directed=True)
for n in G.nodes:
N.add_node(n)
for e,attrs in G.edges.data():
N.add_edge(e[0],e[1],color=attrs['color'])
N.write_html('path/to/your_graph.html')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。