在使用.imshow()函数后保存子图。

3
这是我的可视化代码:
f, ax = plt.subplots(1, 2)
for i, img in enumerate([img1, img2]):    
    grads = # my visualization codes
# visualize grads as heatmap
ax[i].imshow(grads, cmap='jet')

如何在这里使用imshow保存显示的内容?非常感谢任何建议!

你是想保存整个图形(所有子图),还是将每个子图保存到单独的文件中? - mostlyoxygen
1
@mostlyoxygen 最好两者都行?但无论哪种方式都可以。谢谢! - shenglih
1个回答

5
保存整个图形很简单,只需使用savefig函数即可:
f.savefig('filename.png')

有很多可供保存的文件格式,通常可以从文件名的扩展名正确地推断出这些格式。有关更多信息,请参见文档savefig函数接受一个参数bbox_inches,它定义了要保存的图形区域。要将单个子图保存到文件中,可以使用子图的Axes对象的边界框来计算适当的值。
将所有内容组合起来,您的代码将如下所示:
f, ax = plt.subplots(1, 2)
for i, img in enumerate([img1, img2]):    
    grads = # my visualization codes
    # visualize grads as heatmap
    ax[i].imshow(grads, cmap='jet')

    # Save the subplot.
    bbox = ax[i].get_tightbbox(f.canvas.get_renderer())
    f.savefig("subplot{}.png".format(i),
              bbox_inches=bbox.transformed(f.dpi_scale_trans.inverted()))

# Save the whole figure.
f.savefig("whole_figure.png")

这个答案是可行的,但在我的情况下,所有的标签、图例等都会移动,导致保存的图像中它们重叠。除非我最大化窗口,否则它们也会在“show”出来的图中这样做。使用fig.set_size_inches(16,9)savefig的可选参数dpi=300为我解决了这个问题。 - lucidbrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接