Цветовая карта Python Networkx с использованием абсолютных значений - PullRequest
0 голосов
/ 26 ноября 2018

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

Например, следующий код генерирует сеть, узлы которой имеют разные цвета:

G = nx.cycle_graph(6)
edges = np.array(G.edges)
pos = nx.spring_layout(G, iterations=200)

values = np.array([0.1,0.2,0.45,0.25,0.35,0.15])
nx.draw(G, pos, node_color=values,cmap=plt.cm.Reds)

enter image description here

Если мы добавим константу к вектору node_color, как показано ниже:

values = np.array([0.1,0.2,0.45,0.25,0.35,0.15])+1
nx.draw(G, pos, node_color=values,cmap=plt.cm.Reds)

Я ожидаю, что цвета всех узлов станут темнее, но код возвращает идентичную сеть.Есть ли способ изменить это?Я знаю, что в imshow мы можем использовать аргумент «норма», чтобы изменить его.Но есть ли простой способ сделать это для графа networkx?

1 Ответ

0 голосов
/ 26 ноября 2018

Давайте рассмотрим параметры vmin и vmax, найденные в документации matplotlib.pyplot.scatter .В качестве части документации говорится:

См. Networkx.draw_networkx () для описания дополнительных ключевых слов.

Затем в draw_newtorkx docs вПараметры: cmap и vmin, vmax для масштабирования.

G = nx.cycle_graph(6)
edges = np.array(G.edges)
pos = nx.spring_layout(G, iterations=200)

values = np.array([0.1,0.2,0.45,0.25,0.35,0.15])
nx.draw(G, pos, node_color=values,cmap=plt.cm.Reds, vmin=0, vmax=1)

enter image description here

Теперь давайте немного изменим коэффициент масштабирования, чтобы выне полностью маскируем цвета, вместо добавления 1, давайте просто добавим 0,25, поскольку мы не нормализуем.

values = np.array([0.1,0.2,0.45,0.25,0.35,0.15])+.25
nx.draw(G, pos, node_color=values,cmap=plt.cm.Reds, vmin=0, vmax=1)

enter image description here

...