将 Matplotlib 图形保存为全屏图像

Saving Matplotlib graphs to image as full screen

我正在使用 Pandas 和 MatPlotLib 构建一个小型绘图实用程序,以解析数据并从工作中的机器输出图表。

当我使用

输出图形时
plt.show()

我最终得到一张不清晰的图像,其中的图例和标签像这样相互排挤。

但是,将 window 扩展到全屏解决了我的问题,以一种允许图形可见的方式重新定位所有内容。

然后我像这样将图表保存为 .png

plt.savefig('sampleFileName.png')

但是当它保存到图像时,并没有保存全屏的正确版本的绘图,而是保存了错误的默认版本。

如何将情节的全屏 plt.show() 保存为 .png?

我希望我不会太混乱。

感谢您的帮助!

用于最大化 window 大小的方法取决于您使用的 matplotlib 后端。请参阅以下 3 个最常见后端的示例:

import matplotlib.pyplot as plt

plt.figure()
plt.plot([1,2], [1,2])

# Option 1
# QT backend
manager = plt.get_current_fig_manager()
manager.window.showMaximized()

# Option 2
# TkAgg backend
manager = plt.get_current_fig_manager()
manager.resize(*manager.window.maxsize())

# Option 3
# WX backend
manager = plt.get_current_fig_manager()
manager.frame.Maximize(True)

plt.show()
plt.savefig('sampleFileName.png')

您可以使用命令 matplotlib.get_backend() 确定您使用的是哪个后端。当您保存图形的最大化版本时,它会根据需要保存更大的图像。

作为另一种选择,我认为也值得研究

plt.savefig('filename.png', bbox_inches='tight')

如果您正在做 subplots 轴标签看起来很杂乱,这将特别有用。

对于那些在上述答案中收到错误的人,这对我有用。

#Show full screen
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()

完整示例

fig = plt.figure()
fig.imshow(image)
...
plt.figure(fig.number)
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
fig.show()
fig.savefig('figure.png')
mng.full_screen_toggle()

对于使用上述解决方案未能全屏保存情节的所有人,以下是对我真正有用的方法:

    figure = plt.gcf()  # get current figure
    figure.set_size_inches(32, 18) # set figure's size manually to your full screen (32x18)
    plt.savefig('filename.png', bbox_inches='tight') # bbox_inches removes extra white spaces

您可能还想尝试一下 dpi(以每英寸点数为单位的分辨率)

    plt.savefig('filename.png', bbox_inches='tight', dpi=100)

我找到了最常见的答案 on this website。这是所有这些答案的杂乱无章。 貌似所有情况下都可以用,没有兼容性问题

如果您对这个答案有任何疑问,请不要犹豫发表评论。

# Maximise the plotting window
plot_backend = matplotlib.get_backend()
mng = plt.get_current_fig_manager()
if plot_backend == 'TkAgg':
    mng.resize(*mng.window.maxsize())
elif plot_backend == 'wxAgg':
    mng.frame.Maximize(True)
elif plot_backend == 'Qt4Agg':
    mng.window.showMaximized()