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

如何将matplotlib生成的figure对象叠加到另一幅绘图中共同展示

实现方案

你只需要避免在Voronoi图绘制完成后立刻调用plt.show(),所有绘图操作完成后再统一显示即可,核心逻辑是voronoi_plot_2d返回的画布会作为当前活跃画布,后续的绘图指令默认会叠加到该画布上。

完整可运行代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d

# 生成随机测试点
points = np.random.random((20, 2))
vor = Voronoi(points)

# 绘制Voronoi图,同时获取画布和轴对象
fig, ax = voronoi_plot_2d(vor, show_vertices=True, show_points=True)

# 提取需要绘制的线段端点
p1_idx, p2_idx = vor.ridge_points[1]
p1, p2 = points[p1_idx], points[p2_idx]

# 在已有Voronoi图上叠加绘制线段,自定义颜色和线宽方便区分
ax.plot([p1[0], p2[0]], [p1[1], p2[1]], c='crimson', linewidth=3, label='指定山脊线')

# 可选:添加图例
ax.legend()

# 所有元素绘制完成后统一显示
plt.show()

# 原调试打印代码
print(vor.ridge_points)
print(p1_idx)
print(p2_idx)

关键修改说明

  • 补充了缺失的matplotlib.pyplot导入,否则绘图指令无法正常运行
  • 删掉了无意义的fig.add代码行
  • 取消了Voronoi图绘制后的plt.show()调用,避免关闭当前画布导致后续绘图新建独立窗口
  • 显式通过返回的ax对象调用plot方法,不受全局活跃画布切换影响,兼容性更高
  • 修正了原plt.plot的坐标传参逻辑,原写法直接传入两个长度为2的坐标数组会导致绘图不符合预期,需要分别提取x、y坐标的序列传入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:06