web-dev-qa-db-fra.com

Dessinez une couleur différente pour les nœuds dans networkx en fonction de leur valeur de nœud

J'ai un grand graphique de nœuds et d'arêtes dirigées. De plus, j'ai une liste supplémentaire de valeurs assignées à chaque nœud.

Je veux maintenant changer la couleur de chaque nœud en fonction de leur valeur de nœud. Par exemple, dessiner des nœuds avec une valeur très élevée en rouge et ceux avec une valeur faible en bleu (similaire à une carte thermique). Est-ce que cela est facilement réalisable d'une manière ou d'une autre? Sinon avec networkx, je suis également ouvert pour d'autres bibliothèques en Python.

30
fsociety
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_edges_from(
    [('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),
     ('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])

val_map = {'A': 1.0,
           'D': 0.5714285714285714,
           'H': 0.0}

values = [val_map.get(node, 0.25) for node in G.nodes()]

nx.draw(G, cmap=plt.get_cmap('viridis'), node_color=values, with_labels=True, font_color='white')
plt.show()

donne enter image description here


Les nombres dans values sont associés aux nœuds dans G.nodes(). C'est-à-dire que le premier nombre dans values est associé au premier nœud dans G.nodes(), et de même pour le second, et ainsi de suite.

53
unutbu