NetworkX节点颜色与大小字典映射问题求助
解决NetworkX节点十六进制颜色与大小映射问题
1. 匹配颜色/大小列表与节点数量
如果要给每个节点单独设置颜色和大小,node_color和node_size的列表长度必须严格等于图的节点总数。示例代码:
import networkx as nx import matplotlib.pyplot as plt # 创建示例图 G = nx.Graph() G.add_nodes_from([1,2,3,4]) # 每个节点对应唯一的十六进制颜色和大小 node_colors = ["#FF0000", "#00FF00", "#0000FF", "#FFFF00"] node_sizes = [200, 400, 600, 800] # 正常绘图 nx.draw(G, node_color=node_colors, node_size=node_sizes, with_labels=True) plt.show()
2. 规范十六进制颜色格式
十六进制颜色必须以#开头,后跟6位(RGB)或8位(RGBA)合法字符(0-9、A-F/a-f),不能有拼写错误。如果所有节点用同一种颜色,直接传单个字符串即可:
# 所有节点统一使用#336699颜色 nx.draw(G, node_color="#336699", node_size=500, with_labels=True)
如果颜色存在节点属性里,要确保属性值是有效格式:
# 给节点添加color属性 for n in G.nodes: G.nodes[n]['color'] = "#FF0000" if n % 2 == 0 else "#00FF00" # 提取所有节点的颜色列表 node_colors = [G.nodes[n]['color'] for n in G.nodes] nx.draw(G, node_color=node_colors, with_labels=True)
3. 保证节点大小为数值类型
node_size必须是整数或浮点数,不能是字符串。如果大小存在节点属性中,要确保属性值是数值:
# 给节点添加size属性 for n in G.nodes: G.nodes[n]['size'] = 300 * n # 提取所有节点的大小列表 node_sizes = [G.nodes[n]['size'] for n in G.nodes] nx.draw(G, node_size=node_sizes, with_labels=True)
4. 排查字典映射的完整性
如果用字典映射节点到颜色/大小,要确保所有节点都在字典中有对应值,避免KeyError:
# 节点-颜色映射字典 color_map = {1:"#FF0000", 2:"#00FF00", 3:"#0000FF", 4:"#FFFF00"} # 按节点顺序提取颜色 node_colors = [color_map[n] for n in G.nodes] # 节点-大小映射字典 size_map = {1:200, 2:400, 3:600, 4:800} node_sizes = [size_map[n] for n in G.nodes] nx.draw(G, node_color=node_colors, node_size=node_sizes, with_labels=True)
内容的提问来源于stack exchange,提问作者Torsten_Z90
相关产品推荐
相关产品推荐

