Python을 사용하여 plt.show () 창을 최대화하는 방법


97

호기심을 위해 아래 코드에서이 작업을 수행하는 방법을 알고 싶습니다. 나는 답을 찾고 있었지만 쓸모가 없습니다.

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
Windows에서 작업하는 Spoiler : plt.get_current_fig_manager().window.state('zoomed')다음 plt.show().
Basj

1
나를 위해 작동하지 않습니다
Johan

답변:


37

나는 보통 사용

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

를 호출하기 전에 plt.show()창이 최대화됩니다. 이것은 'wx'백엔드에서만 작동합니다.

편집하다:

Qt4Agg 백엔드의 경우 kwerenda의 답변을 참조하십시오 .


66
이것을 사용하여 mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'Matplotlib 1.2.0
Junuxx

2
백엔드 wx에서 작동하며 그에 따라 게시물을 업데이트했습니다. 사용중인 Tk 백엔드가이 기능을 지원하지 않는 것 같습니다. matplotlib 백엔드를 'wx'로 변경할 수있는 옵션이 있습니까?
gg349 2012

11
Mac에서 오류 : mng.frame.Maximize (True) AttributeError : 'FigureManagerMac'개체에 'frame'속성이 없습니다
user391339

8
MacOSX백엔드 에서이를 수행하는 알려진 솔루션이 있습니까? 는 FigureManagerMac속성도 갖고있는 것 같아요 window도를 frame.
McLawrence

3
Windows에서도 동일한 문제가 있습니다
RollRoll

171

저는 Windows (WIN7)에서 Python 2.7.5 및 Matplotlib 1.3.1을 실행하고 있습니다.

다음 줄을 사용하여 TkAgg, QT4Agg 및 wxAgg에 대한 Figure 창을 최대화 할 수있었습니다.

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의 경우)에 결합 된 이전 답변 (및 일부 추가 사항)에 대한 요약이 도움이되기를 바랍니다. 건배


7
### Ubuntu에서 작동합니까 ??? >> 창에 mng.resize 작동하지 않았다 (* mng.window.maxsize ()) 나를 위해 리눅스에 완벽 #works
다니엘

1
@Daniele, 귀하의 솔루션은 Ubuntu의 TkAgg에서 나를 위해 작동합니다. 감사! 그러나 구문 분석하는 데 시간이 좀 걸렸습니다.) 아마도 "mng.resize ..."전에 모든 것을 제거 할 수 있습니다.
BenB

1
사용중인 백엔드를 쉽게 확인할 수있는 방법이 있습니까? 지금 시험 종료 오류를 사용했습니다.
Rutger Hofste

1
불행히도 Qt5Agg로 코드를 시도했지만을 입력 figManager.window.showMaximized()하면 최대화 된 전체 화면 창이 방금 나타납니다. 다음 줄 : plt.show()일반 크기 창에 데이터를 표시하는 다른 창을 표시합니다.
StayFoolish apr

3
Tk 기반 솔루션이 작동하지 않습니다 : _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04).
bluenote10

77

Qt 백엔드 (FigureManagerQT)에서 적절한 명령은 다음과 같습니다.

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

1
이것은 여전히 plt.show()나중에 필요합니다 . 그래도 훌륭한 대답은 Windows에서 작동합니다!
lucidbrot

'_tkinter.tkapp'객체에는 bi 속성 'showMaximized'가 있습니다. 항상 더 파이썬은 더 많은 언어가 아닌 농담이라고 확신
HAL9000

1
@ HAL9000 첫째, 이것은 Tk가 아닌 Qt4 용입니다. 둘째, 외부 패키지 디자인 문제에 대해 언어를 비난하고 있습니다. 어떤 언어로든 이런 종류의 문제가 발생할 수 있습니다.
Jeff Learman

1
내가 얻을 AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'Windows에서.
Basj

46

이렇게하면 TkAgg 백엔드가있는 Ubuntu 12.04에서 창이 전체 화면을 차지하게됩니다.

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

6
이것은 다중 모니터 설정에 이상한 영향을 미칩니다. 창이 최대화되는 대신 모든 모니터를 사용합니다.
user1202136

2
이것은 최대화 된 창 (화면 가장자리에 스냅되어야 함)을 만들지 않지만 최대화 된 창 크기로 최대화되지 않은 창을 만듭니다.
HelloGoodbye

이것은 우분투 14.04의 창을 성공적으로 최대화하여 우리 모두가 알고있는 버튼으로 상단 막대를 유지합니다.
아이린

Ubuntu 16.04 및 Linux mint에서 작동합니다. python2.7 테스트
user1941407

@ user1202136 3 모니터 설정에서 잘 작동했습니다.
Michael Litvin

40

나를 위해 위의 어떤 것도 효과가 없었습니다. 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()

1
이것은 또한 나를 위해 일한 솔루션이었습니다 (최대화 창이 아닌 전체 화면으로 이동하지만). Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3에서 실행됩니다.
CrossEntropy

1
Windows 10 x64, python 3.5의 Visual Studio 2015 내에서 저를 위해 일했습니다. 단, 상단 화면 픽셀 위에 있기 때문에 창 테두리에 액세스하여 그림을 닫을 수 없습니다.
David Cuccia

1
나를 위해 이것은 최대화 된 창을 만드는 것이 아니라 전체 화면을 만듭니다. 일반 창과 같이 최소화, 최대화 / 복원 및 닫기 버튼이 없었고 작업 표시 줄의 창을 마우스 오른쪽 버튼으로 클릭해야 닫을 수 있습니다.
HelloGoodbye

1
모든 창에있는 버튼을 표시하지 않고 전체 화면으로 이동합니다. Ubuntu 14.04에서 시도했습니다.
아이린

1
Raspbian (제시)의 매력처럼 작동
아나 톨

37

이것은 작동합니다 ( 적어도 TkAgg에서는) :

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

(위에서 채택하고 Tkinter를 사용하여 창을 눈에 띄게 확대하지 않고 사용 가능한 화면 크기를 얻는 방법이 있습니까? )


1
예이! 이것은 나를 위해 일했습니다. 화면 가장자리에 스냅되는 최대화 된 창을 만들고 최소화, 최대화 / 복원 및 닫기 버튼이 있어야합니다.
HelloGoodbye

1
그러나 이것이가 TkAgg아니라 TkApp에서 작동한다는 것을 의미 합니까?
HelloGoodbye

좋은 캐치 (아마도 오타)! TkAgg는 Tk의 백엔드입니다.
dinvlad

3
matplotlib 2 / python 3에 대해 이것을 테스트했습니다. 창문 아래에서 작동합니다!
not_a_bot_no_really_82353

7

이것은 일종의 해키이며 아마도 휴대용이 아닙니다. 빠르고 더러운 것을 찾고있는 경우에만 사용하십시오. 화면보다 훨씬 크게 설정하면 화면 전체를 정확하게 차지합니다.

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

사실 Qt4Agg가있는 Ubuntu 16.04에서는 화면보다 크면 창 (전체 화면 아님)을 최대화합니다. (두 개의 모니터가있는 경우 그중 하나에서 최대화합니다.)


나를 위해 작동합니다! 화면 크기를 얻으려고합니다.
StayFoolish apr

7

우분투에서 전체 화면 모드로 이것을 찾았습니다.

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

6

나도 얻는다 mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'.

그런 다음 속성 mng을 살펴 보았고 다음을 발견했습니다.

mng.window.showMaximized()

그것은 나를 위해 일했습니다.

그래서 같은 문제가있는 사람들을 위해 이것을 시도 할 수 있습니다.

그건 그렇고, 내 Matplotlib 버전은 1.3.1입니다.


감사! 이 솔루션은 저에게 잘 맞았습니다. Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3에서 실행됩니다.
CrossEntropy

나는 이것이 전체 화면 창을 팝업한다는 것을 알고 있지만을 입력하면 내 플롯이 별도의 창에 나타납니다 plt.show(). 이 전체 화면 창에 있지 않습니까?
StayFoolish

또한 Debian의 python 3.6 및 Qt 백엔드에서 작동합니다.
pbalaga

이것은 파이썬 3.7을 사용하는 Windows 10 64 비트에서 실행되지 않습니다
George Sp

5

지금까지 최선을 다해 다양한 백엔드를 지원합니다.

from platform import system
def plt_maximize():
    # See discussion: /programming/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)

4

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

3

플롯에 초점이 맞춰져있을 때 f키 (또는 ctrl+f1.2rc1)를 누르면 플롯 창이 전체 화면으로 표시됩니다. 최대화는 아니지만 아마도 더 좋습니다.

그 외에 실제로 최대화하려면 GUI 툴킷 특정 명령을 사용해야합니다 (특정 백엔드에 대해 존재하는 경우).

HTH


이것은 내가 실수로 내 창을 전체 화면으로 눌렀 던 키를 설명합니다! (그리고 그것을 취소하는 방법에 대해 설명합니다.)
cxrodgers

2

내 버전 (Python 3.6, Eclipse, Windows 7)에서는 위에 제공된 스 니펫이 작동하지 않았지만 Eclipse / pydev에서 제공 한 힌트 (입력 후 : mng.)를 사용하여 다음을 발견했습니다.

mng.full_screen_toggle()

mng-commands를 사용하는 것은 로컬 개발에만 괜찮은 것 같습니다 ...


2

추가 키워드 인자와 함께 'Figure.set_size_inches'메서드를 사용해보십시오 forward=True. 에 따르면 문서 , 이것은 해야 그림 창 크기를 조정합니다.

실제로 발생 하는지 여부 는 사용중인 운영 체제에 따라 다릅니다.


2

다음은 @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()

1

시도 plt.figure(figsize=(6*3.13,4*3.13))플롯 더 크게 만들 수 있습니다.


1

좋아, 이것이 나를 위해 일한 것입니다. 나는 전체 showMaximize () 옵션을 수행했으며 그림의 크기에 비례하여 창 크기를 조정하지만 캔버스를 확장하고 '맞추지'않습니다. 나는 이것을 다음과 같이 해결했다.

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

plt.show()

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

변수가 여전히 첫 번째 창을 참조하기 때문에 두 번째 창을 최대화하지 못할 수 있습니다.


0

이것은 반드시 창을 최대화하지는 않지만 Figure의 크기에 비례하여 창 크기를 조정합니다.

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


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

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


2 개의 모니터에서는 작동하지 않습니다. 단순히 창 사이트를 화면 크기 (모니터 크기가 아님)로 변경하고 화면의 왼쪽 상단 픽셀에 배치하지 않습니다. @ ch271828n 솔루션이 잘 작동했습니다
Alex

0

백엔드 GTK3Agg의maximize() 경우 특히 소문자 m 과 함께 사용하십시오 .

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

Python 3.8을 사용하여 Ubuntu 20.04에서 테스트되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.