将 Matplotlib 图形保存为全屏图像

Posted

技术标签:

【中文标题】将 Matplotlib 图形保存为全屏图像【英文标题】:Saving Matplotlib graphs to image as full screen 【发布时间】:2015-12-02 09:23:12 【问题描述】:

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

当我使用

输出图表时
plt.show()

我最终得到一个模糊的图像,其中有传说和标签,像这样相互排挤。

但是,将窗口扩展到全屏解决了我的问题,重新定位所有内容以使图表可见。

然后我将图表保存为 .png 格式

plt.savefig('sampleFileName.png')

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

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

我希望我不会太困惑。

感谢您的帮助!

【问题讨论】:

你能分享MCVE吗?或所有代码,如果可能的话。 我认为在这种情况下不会有太大帮助。对不起,我在混淆。我希望 savefig 保存我发布的图片在 plt.show() 全屏时的样子。一种可能的解决方案可能是更改 plt.show() 的窗口大小。我怎么能这样做? How to maximize a plt.show() window using Python的可能重复 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

#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()

【讨论】:

【参考方案3】:

我找到了最常见的答案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()

【讨论】:

【参考方案4】:

对于使用上述解决方案未能全屏保存情节的每个人来说,这对我来说真正有用:

    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)

【讨论】:

如果您在 MacOS 10.15.7 上使用 Python 3.7,这是上面唯一可行的解​​决方案 :)【参考方案5】:

您用来最大化窗口大小的方法取决于您使用的 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() 确定您正在使用哪个后端。当您保存图形的最大化版本时,它将根据需要保存更大的图像。

【讨论】:

QT,显然!像魅力一样工作! :) 非常感谢,我的朋友。 有什么办法可以将剧情最大化到大于全屏? 不太清楚为什么你想让你的情节比全屏更大。您可以设置 x-lim 和 y-lim 以放大绘图的某个部分。将您的代码调整为plt.show()plt.tight_layout()plt.savefig('sampleFileName.png'),以使绘图占用更多的最大化窗口。 我正在使用 TkAgg 后端,此解决方案以最大化视图显示绘图,但将其保存为默认大小。你能帮忙吗? 你也可以关注plt.savefig('figname.png', bbox_inches='tight')

以上是关于将 Matplotlib 图形保存为全屏图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Matplotlib 图形转换为 PIL Image 对象(不保存图像)

Matplotlib 图形图像转 base64

将matplotlib嵌入到tkinter应用程序中

使用约束为全屏 UIImageView 设置动画

opencv之python版图像的读取显示保存像素遍历以及结合matplotlib使用

如何将启动画面设置为全屏?