Я пытаюсь отобразить цвета узлов при построении нескольких сетей. По сути, я начинаю с кадра данных, который выглядит следующим образом:
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).
Спасибо в заранее.