根据图中数据框中的另一列为节点着色

时间:2019-11-12 18:46:24

标签: python-3.x networkx

我有一个名为df_sort的熊猫数据框,具有以下结构,

结构:

Topic Links         Topic_method_1
ML    Data Mining   1
ML    Data Analysis 1
ML    ggplot2       2
ML    R             3
ML    python        3

问题:

我想为我的数据框创建网络图,并通过“ Topic_method_1”列的值为节点着色

到目前为止尝试:

import networkx as nx
import matplotlib.pyplot as plt

# Build your graph
G=nx.from_pandas_edgelist(df_sort, 'Topic', 'Links')

# Plot it
nx.draw(G, with_labels=True)
plt.show()

问题:

如何为节点添加颜色?我看到文档中有一个node_attribute。

1 个答案:

答案 0 :(得分:0)

所以我发现了错误,技巧是知道'node_color'需要n + 1个大小的数组。其中n是行数。

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

# Build your graph
G=nx.from_pandas_edgelist(df_sort, 'Topic', 'Links')
cbbPalette = ["#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2"]
values = np.where(df_sort['Topic_method_1']==0, cbbPalette[0], 
              np.where(df_sort['Topic_method_1']==1, cbbPalette[1], 
                       np.where(df_sort['Topic_method_1']==2, cbbPalette[2], cbbPalette[3])))

values = np.append(values,cbbPalette[4])
# Plot it
nx.draw(G, with_labels=True, node_color = values)
plt.show()