无法在已有图形上绘图:调用自定义函数两次丢失首次绘图结果
问题原因与解决方法
核心原因
没错,就是因为你覆盖了图形对象,且只对第二个图形做了后续处理:
- 每次调用
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
相关产品推荐
相关产品推荐

