Как сделать так, чтобы цвет узлов в графе сети изменялся последовательно от центра к краю в Networkx - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу нарисовать график, цвет узлов которого в сетевом графике изменяется последовательно от центра к краю следующим образом:

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

И данные взяты из Биткойн-альфа-взвешенная подписанная сеть в Stanford Large Network DatasetКоллекция .

Так что, если не возражаете, кто-нибудь может научить меня, как это реализовать?

Я действительно много раз проводил поиски, но просто не мог понять.

Искренне спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете раскрасить по расстоянию от центра, сначала посчитав расстояние до каждого узла от центра.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)
...