如何使网络图中节点的颜色从Networkx的中心到边缘顺序变化

时间:2019-02-27 09:13:31

标签: python data-visualization networkx

我想画一个图,其网络图中节点的颜色从中心到边缘依次变化,如下所示:

Sample Pic

当我可视化数据时,我不知道如何正确处理异常值,因此我只是对数据进行混洗并充分利用了它们。 这是我的代码和图片:

data = pd.read_csv('soc-sign-bitcoinalpha.csv', names=['SOURCE', 'TARGET', 'RATING', 'TIME'])
new_data = data.iloc[:, :2].copy()
new_data = new_data.reindex(np.random.permutation(new_data.index))
new_data = new_data.iloc[: 18000]
G = nx.from_pandas_edgelist(new_data1, "SOURCE", "TARGET")
nx.draw(G, node_size=5, edge_vmin=1, edge_vmax=2)

My Pic

数据来自Bitcoin Alpha trust weighted signed network in Stanford Large Network Dataset Collection

那么,如果不介意,有人可以教我如何实现它吗?

以前我确实做了很多搜索,但是我无法弄清楚。

真诚的感谢!

1 个答案:

答案 0 :(得分:1)

您可以通过首先计算每个节点距中心的距离来按距中心的距离进行着色。 nx.draw使用sprint_layout定位节点,因此您可以显式调用它以获取节点的位置。位置以(0, 0)为中心,因此您可以简单地使用r = np.sqrt(x**2 + y**2)计算到中心的距离:

pos = nx.spring_layout(G)
node_colors = [np.sqrt((xy**2).sum()) for xy in pos.values()]
nx.draw(G, pos, node_color=node_colors, node_size=5, edge_vmin=1, edge_vmax=2)

仅供参考,您给出的示例可能由节点的中间性着色。要按此度量着色,想法是相同的:

bc = nx.betweenness_centrality(G)
node_colors = list(bc.values())
nx.draw(G, node_color=node_colors)