You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Networkx和Matplotlib基于归一化随机浮点属性设置节点颜色?

给NetworkX节点根据'hc'属性分配Jet颜色映射的解决方案

要实现0对应红色、1对应深紫色的Jet颜色映射,只需借助Matplotlib的颜色映射工具,将节点的'hc'属性值直接转换为对应颜色,再传递给NetworkX的绘图函数即可。以下是修改后的完整代码,核心逻辑同样适用于你的树形图:

import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from scipy.stats import truncnorm
from networkx.drawing.nx_agraph import graphviz_layout

# 构建随机网络(替换为你的树形图即可)
G = nx.erdos_renyi_graph(20, 0.1)

# 生成0-1范围内的'hc'属性
lower, upper = 0, 1
mean_hc = 0.5
devi_hc = 0.1
gaussian_hc = truncnorm((lower - mean_hc) / devi_hc, (upper - mean_hc) / devi_hc, loc=mean_hc, scale=devi_hc)

for i in G:
    G.nodes[i]['hc'] = round(gaussian_hc.rvs(), 3)  # 保留三位小数提升性能

# 提取节点的'hc'值(保证顺序与节点列表一致)
node_hc = [G.nodes[node]['hc'] for node in G.nodes()]

# 获取Jet颜色映射,并将'hc'值转换为对应颜色
cmap = cm.get_cmap('jet')
node_colors = cmap(node_hc)

# 绘图
pos = graphviz_layout(G, prog="dot")
plt.figure(figsize=(30, 30))

# 绘制带颜色的节点,可自定义节点大小、边颜色等
nx.draw(G, pos, node_color=node_colors, node_size=1500, edge_color='#888888', with_labels=True, font_size=12)

# 添加颜色条,直观展示'hc'值与颜色的对应关系
sm = cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=0, vmax=1))
sm.set_array([])
plt.colorbar(sm, shrink=0.6, label='hc Value')

plt.show()

关键步骤说明:

  • 颜色映射转换:使用cm.get_cmap('jet')获取Jet色卡,直接传入0-1范围内的'hc'值即可得到RGBA格式的颜色值列表,完美匹配你的需求(0→红,1→深紫)。
  • 节点顺序一致性:通过列表推导式按节点顺序提取'hc'值,确保颜色与节点一一对应,避免错位。
  • 颜色条添加:通过ScalarMappable创建颜色条,方便查看'hc'值和颜色的对应关系,提升可视化效果。

内容的提问来源于stack exchange,提问作者John Gama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:21:13