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

如何在Python中绘制顶点高度对应成本的3D有向图?

实现有向图的3D可视化(顶点高度对应成本)

核心思路

借助NetworkX构建图结构,结合Matplotlib的3D绘图模块,将NetworkX生成的2D布局作为x、y坐标,顶点成本值作为z轴高度,分别绘制边和顶点,完成3D可视化。

完整代码实现

import networkx as nx
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 定义图的顶点、边和成本
V = [1, 2, 3, 4, 5]
E = {
    1: [2, 3, 4],
    2: [1, 2, 3],
    3: [1, 4, 5],
    4: [5],
    5: [1, 3]
}
c = [81, 23, 43, 22, 100]

# 1. 创建有向图并添加顶点和边
G = nx.DiGraph()
G.add_nodes_from(V)
for u, neighbors in E.items():
    for v in neighbors:
        G.add_edge(u, v)

# 2. 获取顶点的2D布局坐标(x, y),作为3D的x、y轴基础
pos_2d = nx.spring_layout(G, seed=42)  # seed固定布局,保证复现性

# 3. 建立顶点到z轴高度(成本)的映射
z_dict = {v: c[v-1] for v in V}  # 顶点编号从1开始,对应成本列表的索引0

# 4. 创建3D绘图对象
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# 5. 绘制边:遍历每条边,连接两个顶点的3D坐标
for u, v in G.edges():
    x_u, y_u = pos_2d[u]
    z_u = z_dict[u]
    x_v, y_v = pos_2d[v]
    z_v = z_dict[v]
    ax.plot([x_u, x_v], [y_u, y_v], [z_u, z_v], color='#999999', linewidth=1.5)

# 6. 绘制顶点:用散点表示,z轴高度为对应成本
x_coords = [pos_2d[v][0] for v in V]
y_coords = [pos_2d[v][1] for v in V]
z_coords = [z_dict[v] for v in V]
ax.scatter(x_coords, y_coords, z_coords, s=500, c=z_coords, cmap='viridis', edgecolors='black')

# 7. 添加顶点标签(显示顶点编号和对应成本)
for v in V:
    x, y = pos_2d[v]
    z = z_dict[v]
    ax.text3D(x, y, z + 2,
              f"{v}\n(c={z_dict[v]})",
              ha='center', va='center', fontsize=10)

# 8. 设置坐标轴和标题
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('顶点成本')
ax.set_title('有向图3D可视化(顶点高度对应成本)')

# 调整视角,优化查看效果
ax.view_init(elev=30, azim=45)

plt.show()

关键细节说明

  • 固定布局:spring_layout的seed参数固定后,每次运行的2D布局一致,3D可视化效果可稳定复现。
  • 成本映射逻辑:顶点编号从1起始,成本列表c从索引0起始,因此用v-1关联顶点与对应成本值。
  • 边的样式:默认用灰色线段绘制边,若需显示有向箭头,可将ax.plot替换为ax.quiver,并调整箭头大小、长度等参数优化显示效果。
  • 顶点样式:散点大小、颜色映射可按需调整,cmap='viridis'会让成本越高的顶点颜色越深,直观区分成本差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:43:18