使用Matplotlib保存全尺寸图形而不锁定屏幕

时间:2018-02-15 19:10:02

标签: python matplotlib

我已经在必要时编辑了信息。但这个问题抓住了我的问题:

问题陈述:

我的目标很简单:给定图表数据,绘制图表,并自动将其保存为FULLSCREEN IMAGE。 (这需要扩展到大量图表)。我在看: Saving Matplotlib graphs to image as full screen

并提出以下解决方案:

import matplotlib.pyplot as plt

#Prepare Data
some_x_array = [0, 1, 2]
other_x_array = [0, 1, 2]
some_y_array = [4, 5, 6]
other_y_array = [7, 8, 9] 

#Plot Data
plt.plot(some_x_array, some_y_array)
plt.plot(other_x_array, other_y_array)
plt.legend(['The X Axis', 'The Y Axis'])

#Maximize the Window

manager = plt.get_current_fig_manager()
manager.window.showMaximized()

#Acquire figure before the Image Loads
fig = plt.gcf()

#Show the Image (but don't block the flow)
plt.show(block=False)

#Save the image
fig.savefig('stackoverflowimage.png')

然而,运行此脚本的任何人都会意识到它生成的图像不是全尺寸的。如果您将行plt.show(block=False)更改为plt.show(block=True),则会显示一个图表,一旦关闭它,您就会找到完整尺寸的图片。

我想获得一个完整尺寸的图像,没有图形出现并要求人工交互。怎么办?

我尝试解决问题:

在我看来,使屏幕全尺寸的命令是懒惰地执行,即我已经很早就在代码中最大化了窗口,但是直到我展示它,它才会发生。

然后,一个想法是尝试用计时器做一个节目(例如:0.001秒),但这感觉就像一个非常糟糕的设计选择。

1 个答案:

答案 0 :(得分:1)

您找到的解决方案仅在图形显示在窗口中时才有效,因为manager.window.showMaximized()设置了该窗口的大小。实际上并不十分清楚“全屏”在某些窗口管理系统之外意味着什么。例如。什么是服务器上的“全屏”?

因此,如果您对“全屏”应该对应的大小有所了解,则可以将数字大小设置为该数字。

例如,我有一个1920 x 1080像素的屏幕。在这种情况下,我可以将数字大小设置为

fig = plt.figure(figsize=(19.2,10.8), dpi=100)

要以编程方式查找屏幕尺寸,请参阅How do I get monitor resolution in Python?,其中包含适用于各种系统的解决方案。

E.g。使用tkinter

import Tkinter as tk # use tkinter for python 3
root = tk.Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()

import matplotlib.pyplot as plt

#Prepare Data
x,y =   [0, 1, 2],[4, 5, 6]
x1,y1 = [0, 1, 2],[7, 8, 9] 

#Plot Data
fig = plt.figure(figsize=(width/100., height/100.), dpi=100)
plt.plot(x,y, label="label")
plt.legend()

#Save the image
fig.savefig('stackoverflowimage.png')