Cách tối đa hóa cửa sổ plt.show () bằng Python


96

Chỉ vì tò mò, tôi muốn biết cách thực hiện việc này trong đoạn mã dưới đây. Tôi đã tìm kiếm một câu trả lời nhưng vô ích.

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
Spoiler, hoạt động trên Windows: plt.get_current_fig_manager().window.state('zoomed')sau đó plt.show().
Basj

1
không hiệu quả với tôi
Johan

Câu trả lời:


37

Tôi thường sử dụng

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

trước cuộc gọi đến plt.show()và tôi nhận được một cửa sổ tối đa. Điều này chỉ hoạt động cho phụ trợ 'wx'.

BIÊN TẬP:

cho phần phụ trợ Qt4Agg, hãy xem câu trả lời của kwerenda .


66
Sử dụng cái này, tôi nhận được mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'trong Matplotlib 1.2.0
Junuxx 7/12/12

2
Nó hoạt động với wx phụ trợ, tôi đã cập nhật bài đăng cho phù hợp. Có thể phần phụ trợ Tk bạn đang sử dụng không hỗ trợ tính năng này. Bạn có tùy chọn để thay đổi phụ trợ matplotlib thành 'wx' không?
gg349 10/12/12

11
lỗi trên mac: mng.frame.Maximize (True) AttributeError: đối tượng 'FigureManagerMac' không có thuộc tính 'khung'
user391339

7
Có giải pháp nào đã biết để thực hiện việc này trên chương trình MacOSXphụ trợ không? Các FigureManagerMacdường như có cả thuộc tính windowcũng không frame.
McLawrence

3
Tôi gặp vấn đề tương tự trên Windows
RollRoll,

170

Tôi đang sử dụng Windows (WIN7), chạy Python 2.7.5 & Matplotlib 1.3.1.

Tôi đã có thể tối đa hóa cửa sổ Hình cho TkAgg, QT4Agg và wxAgg bằng các dòng sau:

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

Hy vọng bản tóm tắt này của các câu trả lời trước (và một số bổ sung) được kết hợp trong một ví dụ hoạt động (ít nhất là cho windows) sẽ giúp ích. Chúc mừng


7
### hoạt động trên Ubuntu ??? >> KHÔNG hoạt động trên windows mng.resize (* mng.window.maxsize ()) #works hoàn hảo trên linux đối với tôi
Daniele

1
@Daniele, giải pháp của bạn phù hợp với tôi trên TkAgg trên Ubuntu. Cảm ơn! Nhưng tôi phải mất một lúc để phân tích cú pháp;) Có lẽ hãy loại bỏ mọi thứ trước khi "mng.resize ...".
BenB

1
Có cách nào dễ dàng để kiểm tra phần phụ trợ bạn đang sử dụng không? kinda đã sử dụng lỗi kết thúc thử nghiệm ngay bây giờ.
Rutger Hofste

1
Thật không may, tôi đã thử mã của bạn với Qt5Agg, khi tôi nhập vào figManager.window.showMaximized(), cửa sổ toàn màn hình được tối đa hóa chỉ xuất hiện. Dòng tiếp theo: plt.show()chỉ hiển thị một cửa sổ khác vẽ dữ liệu trong một cửa sổ kích thước bình thường.
StayFoolish

3
Giải pháp dựa trên Tk không phù hợp với tôi: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04).
bluenote10

77

Với Qt backend (FigureManagerQT), lệnh thích hợp là:

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

1
Điều này vẫn đòi hỏi plt.show()sau đó. Câu trả lời tuyệt vời mặc dù, hoạt động trên cửa sổ!
lucidbrot

Đối tượng '_tkinter.tkapp' có thuộc tính bi 'showMaximized'. Luôn hơn tin rằng Python là một trò đùa hơn một ngôn ngữ
HAL9000

1
@ HAL9000 Đầu tiên, cái này dành cho Qt 4, không phải Tk. Thứ hai, bạn đang đổ lỗi cho một ngôn ngữ về vấn đề thiết kế gói bên ngoài. Bạn có thể gặp loại vấn đề này bằng bất kỳ ngôn ngữ nào.
Jeff Learman

Tôi AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'sử dụng Windows.
Basj

45

Điều này làm cho cửa sổ chiếm toàn màn hình đối với tôi, trong Ubuntu 12.04 với phần phụ trợ TkAgg:

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

6
Lưu ý rằng điều này có những tác động kỳ lạ đối với thiết lập nhiều màn hình. Cửa sổ sẽ sử dụng hết tất cả màn hình, thay vì được mở rộng tối đa.
user1202136

2
Thao tác này sẽ không tạo ra một cửa sổ được phóng to (sẽ bám vào các cạnh của màn hình), nhưng tạo một cửa sổ không được phóng to với kích thước của một cửa sổ được phóng to nhất.
HelloGoodbye

Điều này cũng tối đa hóa thành công cửa sổ trong Ubuntu 14.04, giữ thanh trên cùng với các nút mà chúng ta đều biết.
Irene

Hoạt động trên Ubuntu 16.04 và bạc hà linux. python2.7 thử nghiệm
user1941407

@ user1202136 Hoạt động tốt đối với tôi trong thiết lập 3 màn hình.
Michael Litvin

40

Đối với tôi không có gì ở trên hoạt động. Tôi sử dụng phần phụ trợ Tk trên Ubuntu 14.04 có chứa matplotlib 1.3.1.

Đoạn mã sau tạo ra một cửa sổ âm mưu toàn màn hình không giống như việc tối đa hóa nhưng nó phục vụ mục đích của tôi một cách độc đáo:

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

1
Đây cũng là giải pháp phù hợp với tôi (mặc dù nó chuyển sang chế độ toàn màn hình, không phải cửa sổ được phóng to). Chạy trên Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy

1
Đã làm việc cho tôi trong Visual Studio 2015 trên Windows 10 x64, python 3.5 ngoại trừ việc tôi không thể truy cập đường viền cửa sổ để đóng hình, vì nó nằm trên pixel màn hình trên cùng.
David Cuccia

1
Đối với tôi, điều này cũng không tạo ra một cửa sổ được phóng to mà là một cửa sổ toàn màn hình. Tôi không nhận được bất kỳ nút thu nhỏ, phóng to / khôi phục nào và đóng lại như các cửa sổ bình thường và tôi phải nhấp chuột phải vào cửa sổ trên thanh tác vụ để có thể đóng nó.
HelloGoodbye

1
Điều này sẽ hiển thị toàn màn hình mà không hiển thị các nút mà mọi cửa sổ đều có. Đã thử trên Ubuntu 14.04.
Irene

1
Làm việc như một nét duyên dáng trên Raspbian (jessie)
Anatol

37

Điều này sẽ hoạt động ( ít nhất là với TkAgg):

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

(được áp dụng từ phần trên và Sử dụng Tkinter, có cách nào để có được kích thước màn hình có thể sử dụng mà không cần phóng to cửa sổ một cách rõ ràng không? )


1
Yay! Điều này đã làm việc cho tôi; nó tạo ra một cửa sổ tối đa gắn vào các cạnh của màn hình và có các nút thu nhỏ, tối đa hóa / khôi phục và đóng lại như mong muốn.
HelloGoodbye

1
Tuy nhiên, bạn có nghĩa là điều này hoạt động với TkAgg, không phải TkApp, phải không?
HelloGoodbye

Bắt tốt (có thể là lỗi đánh máy)! TkAgg là một chương trình phụ trợ cho Tk.
dinvlad

3
Vừa thử nghiệm điều này cho matplotlib 2 / python 3. Hoạt động dưới cửa sổ!
not_a_bot_no_really_82353

7

Đây là loại hacky và có lẽ không di động, chỉ sử dụng nó nếu bạn đang tìm kiếm sự nhanh chóng và bẩn thỉu. Nếu tôi chỉ đặt con số lớn hơn nhiều so với màn hình, nó sẽ chiếm chính xác toàn bộ màn hình.

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

Trên thực tế, trong Ubuntu 16.04 với Qt4Agg, nó sẽ phóng to cửa sổ (không phải toàn màn hình) nếu nó lớn hơn màn hình. (Nếu bạn có hai màn hình, nó chỉ tối đa hóa nó trên một trong số chúng).


Làm việc cho tôi! Khi tôi đang cố lấy kích thước của màn hình.
StayFoolish

7

Tôi tìm thấy điều này cho chế độ toàn màn hình trên Ubuntu

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

6

Tôi cũng nhận được mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'.

Sau đó, tôi xem xét các thuộc tính mngcó, và tôi thấy điều này:

mng.window.showMaximized()

Điều đó đã làm việc cho tôi.

Vì vậy, đối với những người gặp khó khăn tương tự, bạn có thể thử cách này.

Nhân tiện, phiên bản Matplotlib của tôi là 1.3.1.


Cảm ơn! Giải pháp này làm việc tốt cho tôi. Chạy trên Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy

Tôi biết điều này sẽ bật lên một cửa sổ toàn màn hình, nhưng các ô của tôi sẽ xuất hiện trong một cửa sổ riêng khi tôi nhập plt.show(). Không có trên cửa sổ toàn màn hình này, có đề xuất nào không?
StayFoolish

Nó cũng hoạt động trên python 3.6 trên Debian và với phần phụ trợ Qt.
pbalaga

điều này không chạy trên windows 10 64bit với python 3.7
George Sp

4

Giải pháp duy nhất hoạt động hoàn hảo trên 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()

4

Nỗ lực tốt nhất của tôi cho đến nay, hỗ trợ các phụ trợ khác nhau:

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)

3

Nhấn fphím (hoặc ctrl+ftrong 1.2rc1) khi tập trung vào một âm mưu sẽ hiển thị toàn màn hình một cửa sổ âm mưu. Không hoàn toàn tối đa hóa, nhưng có lẽ tốt hơn.

Ngoài ra, để thực sự tối đa hóa, bạn sẽ cần sử dụng các lệnh cụ thể của Bộ công cụ GUI (nếu chúng tồn tại cho chương trình phụ trợ cụ thể của bạn).

HTH


Điều này giải thích phím nào tôi đã vô tình nhấn vào cửa sổ của tôi đã được màn hình đầy đủ! (Và làm thế nào để hủy bỏ nó.)
cxrodgers

2

Trong các phiên bản của tôi (Python 3.6, Eclipse, Windows 7), các đoạn mã được đưa ra ở trên không hoạt động, nhưng với các gợi ý do Eclipse / pydev đưa ra (sau khi nhập: mng.), Tôi thấy:

mng.full_screen_toggle()

Có vẻ như việc sử dụng lệnh mng chỉ phù hợp với phát triển cục bộ ...


2

Hãy thử sử dụng phương pháp 'Hình.set_size_inches', với đối số từ khóa bổ sung forward=True. Theo tài liệu , điều này sẽ thay đổi kích thước cửa sổ hình.

Điều đó có thực sự xảy ra hay không sẽ phụ thuộc vào hệ điều hành bạn đang sử dụng.


2

Đây là một chức năng dựa trên câu trả lời của @ Pythonio. Tôi đóng gói nó thành một hàm tự động phát hiện nó đang sử dụng phần phụ trợ nào và thực hiện các hành động tương ứng.

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

Cố gắng plt.figure(figsize=(6*3.13,4*3.13))làm cho cốt truyện lớn hơn.


1

Ok vì vậy đây là những gì làm việc cho tôi. Tôi đã thực hiện toàn bộ tùy chọn showMaximize () và nó thay đổi kích thước cửa sổ của bạn tương ứng với kích thước của hình, nhưng nó không mở rộng và 'vừa với khung vẽ. Tôi đã giải quyết vấn đề này bằng cách:

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

plt.show()

0

Điều này không nhất thiết phải tối đa hóa cửa sổ của bạn, nhưng nó thay đổi kích thước cửa sổ của bạn tương ứng với kích thước của hình:

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

Điều này cũng có thể hữu ích: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html


0

Những điều sau đây có thể hoạt động với tất cả các phần mềm phụ trợ, nhưng tôi chỉ thử nghiệm nó trên 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()

Sau đó gọi hàm maximize()trướcplt.show()


Không hoạt động với 2 màn hình. Nó chỉ đơn giản là thay đổi trang web cửa sổ thành kích thước màn hình (không phải kích thước màn hình) và cũng không đặt nó trên pixel trên cùng bên trái của màn hình. @ ch271828n giải pháp hoạt động tốt
Alex

0

Đối với GTK3Agg phụ trợ , hãy sử dụng maximize()- đặc biệt là với chữ thường m :

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

Đã thử nghiệm trong Ubuntu 20.04 với Python 3.8.


0

Đối với chương trình phụ trợ dựa trên Tk (TkAgg), hai tùy chọn này sẽ phóng to & toàn màn hình cửa sổ:

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

Khi vẽ biểu đồ vào nhiều cửa sổ, bạn cần viết điều này cho mỗi cửa sổ:

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

Ở đây, cả hai 'số liệu' được vẽ trong các cửa sổ riêng biệt. Sử dụng một biến như

figure_manager = plt.get_current_fig_manager()

có thể không tối đa hóa cửa sổ thứ hai, vì biến vẫn tham chiếu đến cửa sổ đầu tiên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.