Я впервые использую NetworkX и рисую простую сеть на основе pandas фрейма данных.
Узлы находятся в Nodes_df, который имеет идентификатор и соответствующую группу, где Группа определяет, какого цвета будет узел. Edges_df имеет ребра, которые являются связями между ID и ID_2. Все идентификаторы находятся в Nodes_df.
Я могу нарисовать график и раскрасить узлы на основе словаря, который заменяет строки (то есть «Group1») числом, которое используется аргументом cmap
,
Colour_df = Edges_df.replace({"Group5": 5,"Group4": 4, "Group3": 3, "Group2": 2, "Group1": 1})
Colour_map = dict(zip(Nodes_df["ID"].astype(float), Colour_df["Group"]))
G = nx.from_pandas_edgelist(df=Edges_df, source="ID", target="ID_2",
create_using=nx.Graph())
values = [Colour_map.get(node) for node in G.nodes()]
nx.draw(G, cmap=plt.get_cmap('Spectral'), node_color=values,
node_size=20)
plt.show()
Я использую matplotlib и не могу отобразить легенду на графике. Я попытался передать словарь в аргумент label
в nx.draw_networkx_nodes()
, но я просто получаю KeyError: 5.
Я просто хочу легенду, которая выглядит следующим образом:
[] Group1
[] Group2
[] Group3
[...]