NetworkX节点透明度设置问题:如何保留原颜色调整透明度?
解决NetworkX节点保留原颜色并设置透明度的问题
问题根源
NetworkX的节点alpha属性不会被默认绘图函数(比如nx.draw)直接识别生效——绘图时的透明度需要和颜色值绑定,或者通过绘图参数单独传递,没法仅靠节点属性存储实现。
方案1:把颜色转为RGBA格式(推荐)
将原有节点的颜色(不管是颜色名称还是十六进制码)转换成带alpha通道的RGBA值,直接更新color属性,绘图时会自动识别透明度:
import matplotlib.colors as mcolors # 获取目标节点子集(补全data=True才能正确遍历节点属性) subset = [n for n, d in Graph.nodes(data=True)] # 遍历子集节点设置透明度 for node in subset: # 取出节点原有颜色 original_color = Graph.nodes[node]['color'] # 把颜色转换为0-1范围的RGB归一化值 rgb = mcolors.to_rgb(original_color) # 拼接alpha值(这里设为0.5),得到RGBA格式 rgba = rgb + (0.5,) # 更新节点的color属性 Graph.nodes[node]['color'] = rgba
绘图时直接调用节点的color属性即可:
nx.draw(Graph, node_color=[d['color'] for n, d in Graph.nodes(data=True)])
方案2:绘图时单独指定透明度列表
如果不想修改节点的color属性,可以生成对应所有节点的透明度列表,子集节点用目标透明度,其余节点设为1(完全不透明),绘图时传递给node_alpha参数:
# 生成所有节点的透明度列表 node_alphas = [] for n, d in Graph.nodes(data=True): node_alphas.append(0.5 if n in subset else 1.0) # 绘图时同时传入颜色和透明度参数 nx.draw(Graph, node_color=[d['color'] for n, d in Graph.nodes(data=True)], node_alpha=node_alphas)
注意点
- 获取节点子集时必须加上
data=True,否则无法正确遍历节点的属性数据 - 对于'red'这类颜色名称,必须用
matplotlib.colors.to_rgb转换为RGB值,才能正确添加alpha通道
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

