使用聚类标签作为配色方案绘制 Networkx 有向图
Draw Networkx Directed Graph using clustering labels as color scheme
我需要帮助绘制 networkx 有向图。我有一个从数据框创建的有向图,如下所示:
source target weight
ip_1 ip_2 3
ip_1 ip_3 6
ip_4 ip_3 7
.
.
.
之后,在使用 Node2Vec 将节点转换为嵌入后,我使用 elbow+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 颜色值,然后根据权重值在数据框中创建一个名为颜色的列:
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,您可以根据 weight
列添加新列 color
,如下所示:
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')
我需要帮助绘制 networkx 有向图。我有一个从数据框创建的有向图,如下所示:
source target weight
ip_1 ip_2 3
ip_1 ip_3 6
ip_4 ip_3 7
.
.
.
之后,在使用 Node2Vec 将节点转换为嵌入后,我使用 elbow+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 颜色值,然后根据权重值在数据框中创建一个名为颜色的列:
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,您可以根据 weight
列添加新列 color
,如下所示:
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')