如何使用 Python 最大化 plt.show()窗口

只是出于好奇,我想知道如何在下面的代码中做到这一点。我一直在寻找答案,但毫无用处。

import numpy as np
import matplotlib.pyplot as plt
data=np.random.exponential(scale=180, size=10000)
print ('el valor medio de la distribucion exponencial es: ')
print np.average(data)
plt.hist(data,bins=len(data)**0.5,normed=True, cumulative=True, facecolor='red', label='datos tamano paqutes acumulativa', alpha=0.5)
plt.legend()
plt.xlabel('algo')
plt.ylabel('algo')
plt.grid()
plt.show()
203576 次浏览

尝试使用 plt.figure(figsize=(6*3.13,4*3.13))将情节放大。

当聚焦于一个绘图时,按下 f键(或1.2 rc1中的 ctrl+f)将全屏显示一个绘图窗口。不是最大化,但可能更好。

除此之外,要实际最大化,您将需要使用 GUI Toolkit 特定的命令(如果它们存在于您的特定后端)。

高温

尝试使用‘ Figure.set _ size _ inch’方法,使用额外的关键字参数 forward=True

是否发生 事实上将取决于您正在使用的操作系统。

我经常用

mng = plt.get_current_fig_manager()
mng.frame.Maximize(True)

在调用 plt.show()之前,我得到了一个最大化的窗口。这只适用于“ wx”后端。

编辑:

对于 Qt4Agg 后端,请参阅 kwerenda 的 回答

这使得这个窗口占据了我的全屏幕,在 Ubuntu 12.04和 TkAgg 后端下:

    mng = plt.get_current_fig_manager()
mng.resize(*mng.window.maxsize())

对于 Qt 后端(FigureManagerQT) ,正确的命令是:

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

这应该可以(在 至少中使用 TkAgg) :

wm = plt.get_current_fig_manager()
wm.window.state('zoomed')

(采用上述资料及 使用 Tkinter,有没有一种方法可以获得可用的屏幕大小,而不用明显地缩放一个窗口?)

我也有 mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'

然后我查看了 mng的属性,发现了这个:

mng.window.showMaximized()

这招对我管用。

所以对于有同样问题的人,你可以试试这个。

顺便说一下,我的 Matplotlib 版本是1.3。

我在 Windows (WIN7)上运行 Python 2.7.5和 Matplotlib 1.3.1。

我能够使用以下代码行最大化 TkAgg、 QT4Agg 和 wxAgg 的图形窗口:

from matplotlib import pyplot as plt


### for 'TkAgg' backend
plt.figure(1)
plt.switch_backend('TkAgg') #TkAgg (instead Qt4Agg)
print '#1 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
mng = plt.get_current_fig_manager()
### works on Ubuntu??? >> did NOT working on windows
# mng.resize(*mng.window.maxsize())
mng.window.state('zoomed') #works fine on Windows!
plt.show() #close the figure to run the next section


### for 'wxAgg' backend
plt.figure(2)
plt.switch_backend('wxAgg')
print '#2 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
mng = plt.get_current_fig_manager()
mng.frame.Maximize(True)
plt.show() #close the figure to run the next section


### for 'Qt4Agg' backend
plt.figure(3)
plt.switch_backend('QT4Agg') #default on my system
print '#3 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.show()

如果你想最大化多个数字,你可以使用

for fig in figs:
mng = fig.canvas.manager
# ...

希望这个对以前答案的总结(以及一些附加内容)结合在一个工作示例中(至少对窗口是这样)有所帮助。 干杯

对于我来说,以上这些都不起作用。我在 Ubuntu 14.04上使用 Tk 后端,它包含 matplotlib 1.3.1。

下面的代码创建了一个全屏的绘图窗口,它不同于最大化,但它很好地满足了我的目的:

from matplotlib import pyplot as plt
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
plt.show()

这并不一定最大化你的窗口,但是它会根据图形的大小调整窗口的大小:

from matplotlib import pyplot as plt
F = gcf()
Size = F.get_size_inches()
F.set_size_inches(Size[0]*2, Size[1]*2, forward=True)#Set forward to True to resize window along with plot in figure.
plt.show() #or plt.imshow(z_array) if using an animation, where z_array is a matrix or numpy array

这可能也有帮助: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html

以下内容可能适用于所有后端,但我只在 QT 上测试过:

import numpy as np
import matplotlib.pyplot as plt
import time


plt.switch_backend('QT4Agg') #default on my system
print('Backend: {}'.format(plt.get_backend()))


fig = plt.figure()
ax = fig.add_axes([0,0, 1,1])
ax.axis([0,10, 0,10])
ax.plot(5, 5, 'ro')


mng = plt._pylab_helpers.Gcf.figs.get(fig.number, None)


mng.window.showMaximized() #maximize the figure
time.sleep(3)
mng.window.showMinimized() #minimize the figure
time.sleep(3)
mng.window.showNormal() #normal figure
time.sleep(3)
mng.window.hide() #hide the figure
time.sleep(3)
fig.show() #show the previously hidden figure


ax.plot(6,6, 'bo') #just to check that everything is ok
plt.show()

好吧,这就是我的办法。我使用了 showMaximize ()选项,它可以根据图形的大小调整窗口的大小,但是它不会展开并“适合”画布。我解决这个问题的方法是:

mng = plt.get_current_fig_manager()
mng.window.showMaximized()
plt.tight_layout()
plt.savefig('Images/SAVES_PIC_AS_PDF.pdf')


plt.show()

这是一种粗糙的,可能不便于携带,只有使用它,如果你正在寻找快速和肮脏。如果我只是设置比屏幕大得多的数字,它需要整个屏幕。

fig = figure(figsize=(80, 60))

事实上,在 Ubuntu 16.04和 Qt4Agg 中,如果窗口大于屏幕,它会最大化窗口(不是全屏)。(如果你有两个显示器,它只是最大限度地利用其中一个)。

在我的版本(Python 3.6,Eclipse,Windows 7)中,上面给出的代码片段不起作用,但是有 Eclipse/pydev 给出的提示(输入: mng 后)我发现:

mng.full_screen_toggle()

似乎只有在本地开发中才可以使用 mng-command..。

在 Win 10上完美运行的一个解决方案。

import matplotlib.pyplot as plt


plt.plot(x_data, y_data)


mng = plt.get_current_fig_manager()
mng.window.state("zoomed")
plt.show()

到目前为止我最大的努力,支持不同的后端:

from platform import system
def plt_maximize():
# See discussion: https://stackoverflow.com/questions/12439588/how-to-maximize-a-plt-show-window-using-python
backend = plt.get_backend()
cfm = plt.get_current_fig_manager()
if backend == "wxAgg":
cfm.frame.Maximize(True)
elif backend == "TkAgg":
if system() == "Windows":
cfm.window.state("zoomed")  # This is windows only
else:
cfm.resize(*cfm.window.maxsize())
elif backend == "QT4Agg":
cfm.window.showMaximized()
elif callable(getattr(cfm, "full_screen_toggle", None)):
if not getattr(cfm, "flag_is_max", None):
cfm.full_screen_toggle()
cfm.flag_is_max = True
else:
raise RuntimeError("plt_maximize() is not implemented for current backend:", backend)

我在 Ubuntu 上找到了这个全屏模式

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

下面是一个基于@Pythonio 的答案的函数。我将它封装到一个函数中,该函数自动检测它使用的是哪个后端,并执行相应的操作。

def plt_set_fullscreen():
backend = str(plt.get_backend())
mgr = plt.get_current_fig_manager()
if backend == 'TkAgg':
if os.name == 'nt':
mgr.window.state('zoomed')
else:
mgr.resize(*mgr.window.maxsize())
elif backend == 'wxAgg':
mgr.frame.Maximize(True)
elif backend == 'Qt4Agg':
mgr.window.showMaximized()
import matplotlib.pyplot as plt
def maximize():
plot_backend = plt.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()

然后在 plt.show()之前调用函数 maximize()

对于后端 GTK3Agg,使用 maximize()-特别是小写的 :

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

使用 Python 3.8在 Ubuntu 20.04中进行测试。

对于基于 Tk 的后端(TkAgg) ,这两个选项最大化和全屏显示窗口:

plt.get_current_fig_manager().window.state('zoomed')
plt.get_current_fig_manager().window.attributes('-fullscreen', True)

在绘制多个窗口时,需要为每个窗口编写以下代码:

data = rasterio.open(filepath)


blue, green, red, nir = data.read()
plt.figure(1)
plt.subplot(121); plt.imshow(blue);
plt.subplot(122); plt.imshow(red);
plt.get_current_fig_manager().window.state('zoomed')


rgb = np.dstack((red, green, blue))
nrg = np.dstack((nir, red, green))
plt.figure(2)
plt.subplot(121); plt.imshow(rgb);
plt.subplot(122); plt.imshow(nrg);
plt.get_current_fig_manager().window.state('zoomed')


plt.show()

这里,两个“数字”都绘制在不同的窗口中

figure_manager = plt.get_current_fig_manager()

可能不会最大化第二个窗口,因为变量仍然引用第一个窗口。

当我试图达到同样的目标时,我从我正在查看的线程中收集了一些答案。这是我现在正在使用的函数,它可以最大化所有的绘图,并且并不真正关心正在使用的后端。我在脚本的最后运行它。它仍然会遇到其他使用多屏幕设置的人提到的问题,即 fm.window.maxsize ()将获得总屏幕大小,而不仅仅是当前监视器的屏幕大小。如果你知道你想要的屏幕大小,你可以把 * fm.window.maxsize ()替换成 tuple (width _ inch,height _ inch)。

在功能上,所有这些操作只是获取一个图形列表,并将其调整为 matplotlibs 当前对当前最大窗口大小的解释。

def maximizeAllFigures():
'''
Maximizes all matplotlib plots.
'''
for i in plt.get_fignums():
plt.figure(i)
fm = plt.get_current_fig_manager()
fm.resize(*fm.window.maxsize())

我已经尝试了上面的大部分解决方案,但没有一个在我的 Windows 10和 Python 3.10.5上运行良好。

下面是我发现的在我这边非常有效的方法。

import ctypes


mng = plt.get_current_fig_manager()
mng.resize(ctypes.windll.user32.GetSystemMetrics(0), ctypes.windll.user32.GetSystemMetrics(1))