2012-11-22 23 views
23

Tôi có một biểu đồ lớn các nút và các cạnh được hướng. Hơn nữa, tôi có một danh sách bổ sung các giá trị được gán cho mỗi nút.Vẽ màu khác nhau cho các nút trong mạngx dựa trên giá trị nút của chúng

Bây giờ tôi muốn thay đổi màu của mỗi nút theo giá trị nút của chúng. Ví dụ: vẽ các nút có giá trị rất cao màu đỏ và các nút có giá trị xanh dương thấp (tương tự như bản đồ nhiệt). Đây có phải là cách dễ dàng nhất có thể đạt được không? Nếu không với networkx, tôi cũng mở cho các thư viện khác bằng Python.

Trả lời

42
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('jet'), node_color=values) 
plt.show() 

mang

enter image description here


Các con số trong values được kết hợp với các nút trong G.nodes(). Tức là, số đầu tiên trong số values được kết hợp với nút đầu tiên trong số G.nodes() và tương tự cho số thứ hai, v.v.

+0

Cảm ơn, điều này thực sự hữu ích. Tôi vẫn chưa chắc chắn chính xác cách mảng node_color được ánh xạ tới nút tương ứng. Ví dụ: tôi có 3 nút có nhãn tương ứng (13, 557, 35). Làm thế nào chính xác bây giờ tôi gán màu nút khác nhau? – fsociety

+1

Các giá trị được cung cấp cho 'node_color' phải theo thứ tự giống như các nút được liệt kê trong' G.nodes() '. Tôi đã sửa đổi mã để hiển thị cách bạn có thể thực hiện ánh xạ các giá trị tùy ý 'val_map' và tạo danh sách' values' theo thứ tự đúng. – unutbu

+0

Nếu tôi có biểu đồ rất lớn, làm cách nào để tìm màu nào tương ứng với giá trị nào? – MysticForce