将 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 对象(不保存图像)