120

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

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

23 回答 23

187

我在 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
    # ...

希望结合在一个工作示例(至少对于 Windows)中的先前答案(和一些补充)的总结有所帮助。干杯

于 2014-03-15T01:12:12.970 回答
95

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

figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
于 2013-09-16T09:39:03.683 回答
56

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

    mng = plt.get_current_fig_manager()
    mng.resize(*mng.window.maxsize())
于 2013-01-26T13:10:43.760 回答
46

对我来说,以上没有任何效果。我在包含 matplotlib 1.3.1 的 Ubuntu 14.04 上使用 Tk 后端。

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

from matplotlib import pyplot as plt
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
plt.show()
于 2014-05-20T08:59:14.470 回答
45

这应该有效(至少与 TkAgg 一起使用):

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

(从上面采用和使用 Tkinter,有没有办法在不明显缩放窗口的情况下获得可用的屏幕尺寸?

于 2013-11-06T22:08:00.787 回答
44

我通常使用

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

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

编辑:

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

于 2012-09-26T09:53:02.323 回答
14

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

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)
于 2019-02-15T11:46:34.957 回答
10

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

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

mng.window.showMaximized()

这对我有用。

所以有同样困扰的朋友可以试试这个。

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

于 2013-12-17T00:06:14.257 回答
10

这是一种 hacky 并且可能不便携,仅当您正在寻找快速和肮脏时才使用它。如果我只是将图形设置为比屏幕大得多,它会完全占据整个屏幕。

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

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

于 2016-12-02T10:37:42.663 回答
10

我在 Ubuntu 上找到了全屏模式

#Show full screen
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
于 2019-03-09T19:25:19.503 回答
6

在 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()
于 2018-11-23T15:21:11.833 回答
4
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()

于 2020-03-31T12:57:48.233 回答
3

当专注于绘图时按f键(或ctrl+f在 1.2rc1 中)将全屏显示绘图窗口。不是最大化,但也许更好。

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

高温高压

于 2012-09-16T07:14:47.277 回答
3

这是一个基于@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()
于 2019-09-26T00:44:41.883 回答
2

尝试使用带有额外关键字参数的“Figure.set_size_inches”方法forward=True。根据文档,这应该调整图形窗口的大小。

这是否真的发生取决于您使用的操作系统。

于 2012-09-16T15:43:56.770 回答
2

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

mng.full_screen_toggle()

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

于 2018-04-18T06:35:48.030 回答
2

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

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

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

于 2020-09-11T19:00:32.120 回答
1

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

于 2012-09-15T17:37:18.423 回答
1

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

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

plt.show()
于 2016-11-05T10:42:55.137 回答
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()

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

于 2020-09-23T22:00:23.107 回答
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

于 2014-05-28T05:43:20.737 回答
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()
于 2016-02-10T08:46:50.180 回答
0

在尝试实现相同目标时,我从正在查看的线程中收集了一些答案。这是我现在正在使用的函数,它最大化所有图并且并不真正关心正在使用的后端。我在脚本末尾运行它。它仍然会遇到使用多屏设置的其他人提到的问题,因为 fm.window.maxsize() 将获得总屏幕尺寸,而不仅仅是当前显示器的尺寸。如果你知道你想要的屏幕尺寸,你可以用元组 (width_inches, height_inches) 替换 *fm.window.maxsize()。

从功能上讲,这一切都是抓取一个数字列表,并将它们的大小调整为 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())
于 2022-02-28T20:36:43.130 回答