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

时间:2012-09-15 17:31:02

标签: python matplotlib

为了好奇,我想知道如何在下面的代码中执行此操作。我一直在寻找答案,但没用。

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

22 个答案:

答案 0 :(得分:115)

因为我的声誉为零,所以除了新的答案之外别无其他标记 我在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()

希望以前的答案(以及一些新增内容)的总结在一个工作示例(至少对于Windows)中有所帮助。 干杯

答案 1 :(得分:50)

使用Qt后端(FigureManagerQT)正确的命令是:

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

答案 2 :(得分:34)

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

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

答案 3 :(得分:30)

对我来说,没有任何上述工作。我在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()

答案 4 :(得分:28)

我通常使用

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

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

编辑:

对于Qt4Agg后端,请参阅kwerenda的answer

答案 5 :(得分:20)

这应该有效(至少与TkAgg):

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

(从上面采用并Using Tkinter, is there a way to get the usable screen size without visibly zooming a window?

答案 6 :(得分:4)

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

然后我浏览了属性mng,我发现了这个:

mng.window.showMaximized()

这对我有用。

因此,对于遇到同样问题的人,你可以试试这个。

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

答案 7 :(得分:4)

这是一种hacky,可能不便携,只有在你寻找快速和肮脏的时候才使用它。如果我只是将图形设置得比屏幕大得多,那么它就完全占据整个屏幕。

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

事实上,在带有Qt4Agg的Ubuntu 16.04中,如果它比屏幕大,它会最大化窗口(不是全屏)。 (如果你有两台显示器,它只会在其中一台显示器上最大化。)

答案 8 :(得分:2)

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

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

HTH

答案 9 :(得分:2)

尝试使用'Figure.set_size_inches'方法,使用额外的关键字参数forward=True。根据{{​​3}},此调整图形窗口的大小。

实际是否发生将取决于您使用的操作系统。

答案 10 :(得分:2)

尝试plt.figure(figsize=(6*3.13,4*3.13))使地块更大。

答案 11 :(得分:2)

我在Ubuntu的全屏模式下发现了这个

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

答案 12 :(得分:2)

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

mng.full_screen_toggle()

似乎使用mng-commands仅适用于本地开发...

答案 13 :(得分:1)

对于基于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()

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

答案 14 :(得分:1)

到目前为止,我尽最大努力,支持各种后端:

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() == "win32":
            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)

答案 15 :(得分:1)

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

答案 16 :(得分:1)

好的,这对我有用。我做了整个showMaximize()选项,它会根据图形的大小调整窗口大小,但它不会扩展并“适合”画布。我通过以下方式解决了这个问题:

context

答案 17 :(得分:0)

以下内容适用于所有后端,但我仅在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()

答案 18 :(得分:0)

这里是一个基于@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()

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

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

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

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

答案 21 :(得分:0)

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

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