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

无法在已有图形上绘图:调用自定义函数两次丢失首次绘图结果

问题原因与解决方法

核心原因

没错,就是因为你覆盖了图形对象,且只对第二个图形做了后续处理:

  • 每次调用com_snaps都会新建一个独立的2行1列子图图形对象(通过plt.subplots(2,1))。
  • 第一次调用得到的fig, ax1, ax2变量,被第二次调用的同名变量直接覆盖,后续的ax1.legend()、plt.tight_layout()、plt.savefig()全都是针对第二个图形操作的,第一个图形完全没被处理,自然看不到结果。

解决方法

给两次调用的结果分配不同的变量名,分别处理每个图形:

# 第一次调用,用独立变量名存储结果
fig1, ax1_1, ax2_1 = com_snaps(grid_x2, grid_y2, snaps_to_plot2, inds_to_plot, labels, colors2, linewidths2)
# 处理第一个图形
ax1_1.legend()
ax2_1.legend()
plt.tight_layout()
plt.savefig('figure_first.png', dpi=300)

# 第二次调用,同样用独立变量名
fig2, ax1_2, ax2_2 = com_snaps(grid_x, grid_y, snaps_to_plot, inds_to_plot, labels, colors, linewidths)
# 处理第二个图形
ax1_2.legend()
ax2_2.legend()
plt.tight_layout()
plt.savefig('figure_second.png', dpi=300)

# 如果需要显示两个图形,执行此命令
plt.show()

补充说明

之前用plt.show()无效,是因为你只处理了第二个图形,第一个图形从未被触发显示或保存操作。按上面的方式分开处理后,两个图形都会被正确生成和保存/显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:33:21