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

使用networkx与matplotlib绘制并列网络图及中间运算符号的方法

实现多幅网络图横向排布并添加关系符号的正确方案

你之前的布局异常主要是因为子图宽度分配不合理、符号定位方式错误、未显式绑定绘图轴导致的,可通过Matplotlib的GridSpec自定义子图宽度比例实现需求,完整可运行代码如下:

import networkx as nx
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

# 模拟你封装的网络图绘制函数,注意必须接收ax参数指定绘制目标
def draw_model(G, ax):
    # 此处替换为你自己的绘图逻辑,nx.draw指定ax参数即可绘制到对应子图
    nx.draw(
        G, ax=ax,
        with_labels=True,
        node_color="lightblue",
        edge_color="gray",
        node_size=500
    )

# 构造示例网络图,替换为你自己的图对象即可
G_total = nx.grid_2d_graph(1, 5)
G_part1 = nx.grid_2d_graph(1, 2)
G_part2 = nx.grid_2d_graph(1, 2)

# 创建画布,调整figsize适配横向布局
fig = plt.figure(figsize=(12, 3))
# 定义1行5列的网格,自定义宽度比例:网络图列宽,符号列窄
gs = GridSpec(1, 5, width_ratios=[3, 0.5, 3, 0.5, 3])

# 绘制第一张网络图
ax1 = fig.add_subplot(gs[0])
draw_model(G_total, ax1)

# 添加等号
ax_eq = fig.add_subplot(gs[1])
ax_eq.axis("off") # 隐藏符号列的坐标轴边框、刻度
# 相对坐标居中放置符号,字号可按需调整
ax_eq.text(0.5, 0.5, "$=$", fontsize=30, ha="center", va="center")

# 绘制第二张网络图
ax2 = fig.add_subplot(gs[2])
draw_model(G_part1, ax2)

# 添加并集符号
ax_cup = fig.add_subplot(gs[3])
ax_cup.axis("off")
ax_cup.text(0.5, 0.5, "$\cup$", fontsize=30, ha="center", va="center")

# 绘制第三张网络图
ax3 = fig.add_subplot(gs[4])
draw_model(G_part2, ax3)

# 自动调整布局避免元素重叠
plt.tight_layout()
plt.show()

关键优化点

  • 用GridSpec自定义子图宽度比例,避免符号列占用过多空间挤压网络图
  • 符号列关闭坐标轴,使用相对坐标居中放置符号,适配不同画布大小
  • 所有绘图操作显式指定ax参数,保证图形绘制到对应子图,不会出现位置错乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:27:08