我已经在必要时编辑了信息。但这个问题抓住了我的问题:
我的目标很简单:给定图表数据,绘制图表,并自动将其保存为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秒),但这感觉就像一个非常糟糕的设计选择。
答案 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')