Цветовая карта Networkx и matplotlib для узлов; та же карта для разных сетей - PullRequest
0 голосов
/ 11 февраля 2020

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

data.head()

    x     y     C1    C2    C3    C4            
n1  0.63  0.34  1.00  1.00  1.00  1.07
n2  0.56  0.27  0.94  0.91  0.94  1.11
n3  0.59  0.26  1.07  1.02  1.05  1.21
n4  0.65  0.38  1.15  1.27  1.55  0.98
n5  0.63  0.44  0.93  0.89  0.99  1.04

Каждая строка - это сетевой узел (список ребер хранится в другом файле), и я использую столбцы x и y в качестве расположение узлов. Моя цель состоит в том, чтобы построить четыре раза сеть, с цветами узлов, соответствующими значениям каждого из четырех столбцов C1/C1/C3/C4.

Итак, чтобы легко сравнить эволюцию значения каждого узла, я попытался определить диапазон цветовой карты с минимальными и максимальными значениями четырех столбцов (жестко закодированы в примере кода ниже), когда прокладка сети:

cmap = plt.cm.YlOrRd
vmin, vmax = 0.0, 200.0
nodes_colors = data['C1'] # or C2,C3,C4
nx.draw_networkx_nodes(my_network, 
                       pos=my_positions_dict, 
                       node_size=200, 
                       edgecolors='black',
                       node_color=nodes_colors,                            
                       cmap=cmap, 
                       vmin=vmin, 
                       vmax=vmax)

Но это не работает! У меня есть только несколько узлов с высокими значениями, поэтому их легко проверить вручную, а цвета неправильные. Что я сделал не так с этой первой попыткой?

Я попробовал другой способ, используя ScalarMappable:

import matplotlib.pyplot as plt
cmap = plt.cm.YlOrRd
vmin = 0.0
vmax = 200.0
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=vmin, vmax=vmax))

Но тогда я не знаю, как это использовать при построении сети. Может ли это работать так?

К сожалению, я не поделился воспроизводимым кодом, потому что у меня много предварительной обработки входных данных (которые, к тому же, пока не опубликованы c).

Спасибо в заранее.

1 Ответ

0 голосов
/ 11 февраля 2020

На самом деле это была проблема порядка индекса и порядка узлов между кадром данных и сетью. Извините, что задаю глупые вопросы.

...