如何使用networkx与plotly创建交互式脑形3D可视化图?
完全可以实现,以下是可直接落地的实现方案
你所参考的类人脑3D节点效果图:
实现方案
1. 核心逻辑
- networkx负责存储节点、边、自定义属性(比如节点颜色标记),人脑外形的节点坐标可以通过变形椭球采样/公开人脑点云数据集获取,无需依赖networkx的默认布局算法。
- plotly负责渲染3D节点、可选连线,自带旋转、缩放、悬停显示节点信息的原生交互能力。
2. 完整可运行代码示例
第一步:环境依赖安装
pip install numpy networkx plotly
第二步:代码实现
import numpy as np import networkx as nx import plotly.graph_objects as go # ---------------------- 1. 生成类人脑外轮廓3D节点坐标 ---------------------- # 用变形椭球模拟人脑外形,无需额外3D建模,效果和参考图接近 total_nodes = 500 # 可自行调整总节点数量 theta = np.random.uniform(0, 2 * np.pi, total_nodes) phi = np.random.uniform(0, np.pi, total_nodes) # 三轴半径调整模拟人脑扁长形态,加扰动模拟表面褶皱 radius = 1 + 0.1 * np.sin(3 * theta) * np.cos(phi) x = radius * np.sin(phi) * np.cos(theta) * 1.2 y = radius * np.sin(phi) * np.sin(theta) * 0.9 z = radius * np.cos(phi) * 1.0 # ---------------------- 2. 构建networkx图并绑定节点属性 ---------------------- G = nx.Graph() # 此处替换为你需要高亮的指定节点ID列表 highlight_node_ids = [12, 36, 78, 123, 245, 369, 410] for node_id in range(total_nodes): G.add_node( node_id, pos=(x[node_id], y[node_id], z[node_id]), # 自定义高亮节点和普通节点的颜色 color="#ff2b2b" if node_id in highlight_node_ids else "#a8d1ff" ) # 若需要展示边,可自行调用G.add_edge()添加关联关系,无需求可以只保留节点 # ---------------------- 3. 用plotly渲染交互3D可视化 ---------------------- # 提取节点坐标和颜色配置 node_x = [G.nodes[n]["pos"][0] for n in G.nodes] node_y = [G.nodes[n]["pos"][1] for n in G.nodes] node_z = [G.nodes[n]["pos"][2] for n in G.nodes] node_color_list = [G.nodes[n]["color"] for n in G.nodes] # 绘制3D节点散点 fig = go.Figure(data=[go.Scatter3d( x=node_x, y=node_y, z=node_z, mode="markers", marker=dict( size=5, color=node_color_list, opacity=0.85 ), # 悬停显示节点ID,可自定义为其他节点属性 hovertext=[f"节点ID:{n}" for n in G.nodes] )]) # 优化布局,隐藏坐标轴更美观 fig.update_layout( scene=dict( xaxis=dict(showticklabels=False, showbackground=False, title=""), yaxis=dict(showticklabels=False, showbackground=False, title=""), zaxis=dict(showticklabels=False, showbackground=False, title="") ), showlegend=False, height=800, margin=dict(l=0, r=0, t=0, b=0) ) # 打开浏览器展示交互可视化结果 fig.show()
3. 效果优化说明
- 若需要完全匹配真实人脑轮廓,可替换代码中生成椭球坐标的部分,改用公开的人脑3D表面点云数据集的坐标即可,networkx和plotly的渲染逻辑无需改动。
- 节点大小、颜色、透明度均可直接修改plotly的marker参数调整,边的样式也可单独配置。
- 若不需要展示边,直接保留现有代码的节点逻辑即可,实现成本最低。
内容的提问来源于stack exchange,提问作者Penguin
相关产品推荐
相关产品推荐


