วิธีขยายหน้าต่าง plt.show () ให้ใหญ่ที่สุดโดยใช้ Python


95

เพียงแค่อยากรู้อยากเห็นฉันต้องการทราบวิธีการทำในโค้ดด้านล่าง ฉันค้นหาคำตอบ แต่ก็ไม่มีประโยชน์

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: แล้วplt.get_current_fig_manager().window.state('zoomed') plt.show()
Basj

1
ไม่ได้ผลสำหรับฉัน
โยฮัน

คำตอบ:


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
ใช้งานได้กับ backend wx ฉันได้อัปเดตโพสต์ตามนั้น อาจเป็นไปได้ว่าแบ็กเอนด์ Tk ที่คุณใช้ไม่รองรับคุณสมบัตินี้ คุณมีตัวเลือกในการเปลี่ยนแบ็กเอนด์ matplotlib เป็น 'wx' หรือไม่?
gg349

11
ข้อผิดพลาดบน mac: mng.frame.Maximize (True) AttributeError: วัตถุ 'FigureManagerMac' ไม่มีแอตทริบิวต์ 'frame'
user391339

7
มีวิธีแก้ปัญหาที่เป็นที่รู้จักในการดำเนินการนี้ในMacOSXแบ็กเอนด์หรือไม่ FigureManagerMacดูเหมือนว่าจะมีค่าแอตทริบิวต์มิได้window frame
McLawrence

3
ฉันมีปัญหาเดียวกันใน Windows
RollRoll

169

ฉันใช้ 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) จะช่วยได้ ไชโย


7
### ใช้งานได้บน Ubuntu ??? >> ไม่ทำงานบน windows mng.resize (* mng.window.maxsize ()) #works ที่สมบูรณ์แบบบน linux สำหรับฉัน
Daniele

1
@Daniele โซลูชันของคุณใช้ได้กับฉันบน TkAgg บน Ubuntu ขอบคุณ! แต่ฉันใช้เวลาสักพักในการแยกวิเคราะห์;) อาจจะกำจัดทุกอย่างก่อน "mng.resize ... "
BenB

1
มีวิธีง่ายๆในการตรวจสอบแบ็กเอนด์ที่คุณใช้อยู่หรือไม่? ตอนนี้ใช้ข้อผิดพลาดในการสิ้นสุดการทดลองใช้แล้ว
Rutger Hofste

1
น่าเสียดายที่ฉันลองใช้รหัสของคุณด้วย Qt5Agg เมื่อฉันพิมพ์figManager.window.showMaximized()หน้าต่างเต็มหน้าจอที่ขยายใหญ่สุดก็โผล่ขึ้นมา บรรทัดถัดไป: plt.show()เพียงแค่แสดงหน้าต่างอื่นที่พล็อตข้อมูลในหน้าต่างขนาดปกติ
StayFoolish

3
โซลูชันที่ใช้ Tk ใช้ไม่ได้สำหรับฉัน: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04)
bluenote10

77

ด้วย Qt backend (FigureManagerQT) คำสั่งที่เหมาะสมคือ:

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

1
สิ่งนี้ยังคงต้องใช้ในplt.show()ภายหลัง คำตอบที่ดีใช้ได้กับ windows!
lucidbrot

วัตถุ '_tkinter.tkapp' มี bi แอตทริบิวต์ 'showMaximized' เชื่อเสมอว่า Python เป็นเรื่องตลกมากกว่าภาษา
HAL9000

1
@ HAL9000 อันดับแรกนี่คือสำหรับ Qt4 ไม่ใช่ Tk ประการที่สองคุณกำลังตำหนิภาษาสำหรับปัญหาการออกแบบแพ็คเกจภายนอก คุณสามารถมีปัญหาประเภทนี้ในภาษาใดก็ได้
Jeff Learman

ฉันAttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'ใช้ Windows
Basj

45

สิ่งนี้ทำให้หน้าต่างเต็มหน้าจอสำหรับฉันภายใต้ Ubuntu 12.04 พร้อมแบ็กเอนด์ TkAgg:

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

6
โปรดทราบว่าสิ่งนี้มีผลแปลก ๆ ในการตั้งค่าจอภาพหลายจอ หน้าต่างจะใช้จอภาพทั้งหมดแทนการขยายใหญ่สุด
user1202136

2
การดำเนินการนี้จะไม่สร้างหน้าต่างที่ขยายใหญ่สุด (ซึ่งควรชิดขอบของหน้าจอ) แต่สร้างหน้าต่างที่ไม่ขยายใหญ่สุดโดยมีขนาดใหญ่สุด
HelloGoodbye

สิ่งนี้ทำให้หน้าต่างขยายใหญ่สุดใน Ubuntu 14.04 ได้สำเร็จเช่นกันทำให้แถบด้านบนมีปุ่มที่เราทุกคนรู้จัก
Irene

ทำงานบน Ubuntu 16.04 และ linux mint python2.7 ทดสอบแล้ว
user1941407

@ user1202136 ทำงานได้ดีสำหรับฉันในการตั้งค่า 3 จอภาพ
Michael Litvin

40

สำหรับฉันไม่มีอะไรข้างต้นได้ผล ฉันใช้แบ็กเอนด์ Tk บน Ubuntu 14.04 ซึ่งมี matplotlib 1.3.1

รหัสต่อไปนี้สร้างหน้าต่างพล็อตแบบเต็มหน้าจอซึ่งไม่เหมือนกับการขยายใหญ่สุด แต่ตอบสนองจุดประสงค์ของฉันได้ดี:

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
ทำงานให้ฉันภายใน Visual Studio 2015 บน Windows 10 x64, python 3.5 ยกเว้นว่าฉันไม่สามารถเข้าถึงเส้นขอบหน้าต่างเพื่อปิดรูปได้เนื่องจากอยู่เหนือพิกเซลหน้าจอด้านบน
David Cuccia

1
สำหรับฉันนี่ไม่ได้สร้างหน้าต่างขยายใหญ่สุด แต่เป็นหน้าต่างเต็มหน้าจอ ฉันไม่ได้รับปุ่มย่อเล็กย่อขยายใหญ่สุด / กู้คืนและปิดเหมือนที่หน้าต่างปกติมีและฉันต้องคลิกขวาที่หน้าต่างบนแถบงานเพื่อให้สามารถปิดได้
HelloGoodbye

1
การดำเนินการนี้จะแสดงแบบเต็มหน้าจอโดยไม่แสดงปุ่มต่างๆที่มี พยายามบน Ubuntu 14.04
Irene

1
การทำงานอย่างมีเสน่ห์บน Raspbian (jessie)
anatol

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

ในความเป็นจริงใน Ubuntu 16.04 พร้อม Qt4Agg จะขยายหน้าต่างให้ใหญ่ที่สุด (ไม่ใช่แบบเต็มหน้าจอ) หากใหญ่กว่าหน้าจอ (หากคุณมีจอภาพสองจอเพียงแค่ขยายให้ใหญ่สุดบนหนึ่งในนั้น)


ใช้ได้ผลสำหรับฉัน! ขณะที่ฉันกำลังพยายามหาขนาดของหน้าจอ
StayFoolish


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

นอกจากนี้ยังทำงานบน python 3.6 บน Debian และแบ็กเอนด์ Qt
pbalaga

สิ่งนี้ไม่ทำงานบน windows 10 64bit พร้อม python 3.7
George Sp

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

4

ความพยายามอย่างเต็มที่ของฉันในตอนนี้การสนับสนุนแบ็กเอนด์ต่างๆ:

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

การกดปุ่มf(หรือctrl+fใน 1.2rc1) เมื่อโฟกัสไปที่พล็อตจะเป็นการแสดงหน้าต่างพล็อตแบบเต็มจอ ไม่ได้เพิ่มขึ้นมากนัก แต่อาจจะดีกว่า

นอกเหนือจากนั้นในการขยายให้ใหญ่ที่สุดคุณจะต้องใช้คำสั่งเฉพาะ GUI Toolkit (หากมีอยู่สำหรับแบ็กเอนด์เฉพาะของคุณ)

HTH


สิ่งนี้อธิบายว่าคีย์ใดที่ฉันเผลอกดปุ่มนั้นโดยไม่ได้ตั้งใจซึ่งทำให้หน้าต่างของฉันเต็มจอ! (และวิธียกเลิก)
cxrodgers

2

ในเวอร์ชันของฉัน (Python 3.6, Eclipse, Windows 7) ตัวอย่างที่ระบุข้างต้นใช้งานไม่ได้ แต่ด้วยคำแนะนำที่กำหนดโดย Eclipse / pydev (หลังจากพิมพ์: mng.) ฉันพบว่า:

mng.full_screen_toggle()

ดูเหมือนว่าการใช้คำสั่ง mng จะใช้ได้เฉพาะกับการพัฒนาท้องถิ่น ...


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

ตกลงนี่คือสิ่งที่ได้ผลสำหรับฉัน ฉันใช้ตัวเลือก showMaximize () ทั้งหมดและจะปรับขนาดหน้าต่างของคุณตามขนาดของรูป แต่ไม่ขยายและ 'พอดี' กับผืนผ้าใบ ฉันแก้ไขสิ่งนี้โดย:

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

plt.show()

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


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

ทดสอบใน Ubuntu 20.04 ด้วย Python 3.8


0

สำหรับแบ็กเอนด์ที่ใช้ 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()

อาจไม่ขยายหน้าต่างที่สองให้ใหญ่ที่สุดเนื่องจากตัวแปรยังคงอ้างถึงหน้าต่างแรก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.