基于graph-tool的嵌套随机块模型:按高层社区设置颜色
按层级社区着色嵌套随机块模型绘图
要实现按指定高层级社区统一着色,核心是从嵌套块模型的层级结构中提取目标层级的块分配,再基于该分配生成对应颜色映射,传递给绘图参数即可。以下是修改后的完整代码:
import graph_tool.all as gt import numpy as np g = gt.collection.data["celegansneural"] print(g) state = gt.minimize_nested_blockmodel_dl(g) # 选择目标层级:-1表示最高层级,0表示最底层,可根据需求调整 target_level_idx = -1 target_level = state.get_levels()[target_level_idx] # 获取该层级下每个节点的块ID block_assignments = target_level.get_blocks() # 生成颜色映射:将块ID转换为颜色数组 vertex_colors = gt.prop_to_color(block_assignments, palette="tab20") options = { 'hedge_color': np.array([0., 0., 0., 1]), # 使用层级块对应的颜色填充层级顶点和原始节点 'hvertex_fill_color': vertex_colors, 'vertex_fill_color': vertex_colors, 'output_size': (600, 600), 'bg_color': 'w', } state.draw(beta=0.90, **options)
关键说明:
- 层级选择:
state.get_levels()返回模型的所有层级列表,索引-1对应最顶层(所有节点属于同一个社区,此时所有元素颜色一致),索引0对应最底层(原代码的默认着色逻辑),你可以根据需要调整target_level_idx的值选择中间层级。 - 颜色生成:
gt.prop_to_color()会自动将块ID映射为区分度高的颜色,也可以通过palette参数指定自定义调色板(比如"viridis"、"coolwarm"等)。 - 参数传递:将生成的
vertex_colors同时赋值给hvertex_fill_color(层级结构中的顶点)和vertex_fill_color(原始图节点),确保层级分支与对应节点颜色统一。
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

