如何将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
相关产品推荐
相关产品推荐

