Cara memaksimalkan jendela plt.show () menggunakan Python

96

Hanya untuk rasa ingin tahu, saya ingin tahu bagaimana melakukan ini dalam kode di bawah ini. Saya telah mencari jawaban tetapi tidak berguna.

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()
Santiago Lovera
sumber
4
Spoiler, bekerja di Windows: plt.get_current_fig_manager().window.state('zoomed')lalu plt.show().
Basj
1
tidak bekerja untuk saya
Johan

Jawaban:

37

Saya biasanya menggunakan

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

sebelum panggilan ke plt.show(), dan saya mendapatkan jendela yang dimaksimalkan. Ini hanya berfungsi untuk backend 'wx'.

EDIT:

untuk backend Qt4Agg, lihat jawaban kwerenda .

gg349
sumber
66
Menggunakan ini, saya masuk mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'ke Matplotlib 1.2.0
Junuxx
2
Ini berfungsi dengan backend wx, saya telah memperbarui posting yang sesuai. Kemungkinan backend Tk yang Anda gunakan tidak mendukung fitur ini. Apakah Anda memiliki opsi untuk mengubah backend matplotlib menjadi 'wx'?
gg349
11
kesalahan pada mac: mng.frame.Maximize (True) AttributeError: objek 'FigureManagerMac' tidak memiliki atribut 'frame'
user391339
7
Apakah ada solusi yang diketahui untuk melakukan ini di MacOSXbackend? The FigureManagerMactampaknya memiliki tidak atribut windowatau frame.
McLawrence
3
Saya memiliki masalah yang sama di Windows
RollRoll
170

Saya menggunakan Windows (WIN7), menjalankan Python 2.7.5 & Matplotlib 1.3.1.

Saya dapat memaksimalkan jendela Gambar untuk TkAgg, QT4Agg, dan wxAgg menggunakan baris berikut:

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

Semoga ringkasan dari jawaban sebelumnya (dan beberapa tambahan) digabungkan dalam contoh kerja (setidaknya untuk windows) membantu. Bersulang

Pythonio
sumber
7
### berfungsi di Ubuntu ??? >> TIDAK bekerja pada windows mng.resize (* mng.window.maxsize ()) #works perfect on linux for me
Daniele
1
@Daniele, solusi Anda berfungsi untuk saya di TkAgg di Ubuntu. Terima kasih! Tapi butuh beberapa saat untuk mengurai;) Mungkin menyingkirkan semuanya sebelum "mng.resize ...".
BenB
1
Apakah ada cara mudah untuk memeriksa backend yang Anda gunakan? agak digunakan kesalahan akhir uji coba sekarang.
Rutger Hofste
1
Sayangnya, saya mencoba kode Anda dengan Qt5Agg, ketika saya mengetik figManager.window.showMaximized(), jendela layar penuh yang dimaksimalkan baru saja muncul. Baris berikutnya: plt.show()tampilkan saja jendela lain yang memplot data dalam jendela ukuran normal.
StayFoolish
3
Solusi berbasis Tk tidak berfungsi untuk saya: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04).
bluenote10
77

Dengan Qt backend (FigureManagerQT), perintah yang tepat adalah:

figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
kwerenda
sumber
1
Ini masih membutuhkan plt.show()sesudahnya. Jawaban yang bagus, bekerja di windows!
lucidbrot
Objek '_tkinter.tkapp' memiliki atribut bi 'showMaximized'. Selalu lebih yakin bahwa Python adalah lelucon lebih dari sekedar bahasa
HAL9000
1
@ HAL9000 Pertama, ini untuk Qt4, bukan Tk. Kedua, Anda menyalahkan bahasa untuk masalah desain paket eksternal. Anda dapat mengalami masalah seperti ini dalam bahasa apa pun.
Jeff Learman
Saya AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'menggunakan Windows.
Basj
45

Ini membuat jendela mengambil layar penuh untuk saya, di bawah Ubuntu 12.04 dengan backend TkAgg:

    mng = plt.get_current_fig_manager()
    mng.resize(*mng.window.maxsize())
Dan Christensen
sumber
6
Perhatikan bahwa ini memiliki efek aneh pada pengaturan beberapa monitor. Jendela akan menggunakan semua monitor, bukannya dimaksimalkan.
pengguna1202136
2
Ini tidak akan membuat jendela yang dimaksimalkan (yang harus dipasang ke tepi layar), tetapi membuat jendela yang tidak dimaksimalkan dengan ukuran yang dimaksimalkan.
HelloGoodbye
Ini berhasil memaksimalkan jendela di Ubuntu 14.04 juga, menjaga bilah atas dengan tombol yang kita semua tahu.
Irene
Bekerja pada Ubuntu 16.04 dan linux mint. python2.7 diuji
user1941407
@ user1202136 Bekerja dengan baik untuk saya dalam pengaturan 3-monitor.
Michael Litvin
40

Bagi saya tidak ada hal di atas yang berhasil. Saya menggunakan backend Tk di Ubuntu 14.04 yang berisi matplotlib 1.3.1.

Kode berikut membuat jendela plot layar penuh yang tidak sama dengan memaksimalkan tetapi melayani tujuan saya dengan baik:

from matplotlib import pyplot as plt
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
plt.show()
peschü
sumber
1
Ini juga solusi yang berhasil untuk saya (meskipun masuk ke layar penuh, bukan jendela yang dimaksimalkan). Berjalan di Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy
1
Bekerja untuk saya dalam Visual Studio 2015 pada Windows 10 x64, python 3.5 kecuali bahwa saya tidak dapat mengakses batas jendela untuk menutup gambar, karena berada di atas piksel layar atas.
David Cuccia
1
Bagi saya, ini juga tidak membuat jendela yang dimaksimalkan, tetapi jendela layar penuh. Saya tidak mendapatkan tombol meminimalkan, memaksimalkan / memulihkan, dan menutup seperti yang dimiliki jendela normal dan saya harus mengklik kanan pada jendela di bilah tugas untuk menutupnya.
HelloGoodbye
1
Ini berjalan layar penuh tanpa menunjukkan tombol yang dimiliki setiap jendela. Sudah mencoba Ubuntu 14.04.
Irene
1
Bekerja seperti pesona pada Raspbian (jessie)
anatol
37

Ini harus bekerja ( setidaknya dengan TkAgg):

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

(diadopsi dari yang di atas dan Menggunakan Tkinter, apakah ada cara untuk mendapatkan ukuran layar yang dapat digunakan tanpa memperbesar tampilan jendela? )

dinvlad.dll
sumber
1
Yay! Ini berhasil untuk saya; itu menciptakan jendela yang dimaksimalkan yang terkunci ke tepi layar dan meminimalkan, memaksimalkan / memulihkan dan menutup tombol sebagaimana mestinya.
HelloGoodbye
1
Namun, maksud Anda ini berfungsi dengan TkAgg, bukan TkApp, bukan?
HelloGoodbye
Tangkapan yang bagus (mungkin salah ketik)! TkAgg adalah backend untuk Tk.
dinvlad
3
Baru saja menguji ini untuk matplotlib 2 / python 3. Bekerja di bawah jendela!
not_a_bot_no_really_82353
7

Ini agak hacky dan mungkin tidak portabel, hanya gunakan jika Anda mencari yang cepat dan kotor. Jika saya hanya mengatur gambar yang jauh lebih besar dari layar, dibutuhkan persis seluruh layar.

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

Faktanya, di Ubuntu 16.04 dengan Qt4Agg, ini memaksimalkan jendela (bukan layar penuh) jika lebih besar dari layar. (Jika Anda memiliki dua monitor, itu hanya memaksimalkannya di salah satunya).

Menandai
sumber
Bekerja untuk saya! Saat saya mencoba untuk mendapatkan ukuran layar.
StayFoolish
7

Saya menemukan ini untuk mode layar penuh di Ubuntu

#Show full screen
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
Westly White
sumber
6

Saya mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'juga.

Kemudian saya melihat melalui atribut mnghas, dan saya menemukan ini:

mng.window.showMaximized()

Itu berhasil untuk saya.

Jadi bagi orang yang memiliki masalah yang sama, Anda boleh mencoba cara ini.

Omong-omong, versi Matplotlib saya adalah 1.3.1.

Alan Wang
sumber
Terima kasih! Solusi ini bekerja dengan baik untuk saya. Berjalan di Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy
Saya tahu ini akan memunculkan jendela layar penuh, tetapi plot saya akan muncul di jendela terpisah saat saya mengetik plt.show(). Tidak ada di jendela layar penuh ini, ada saran?
StayFoolish
Ia juga bekerja pada python 3.6 di Debian dan dengan backend Qt.
pbalaga
ini tidak berjalan di windows 10 64bit dengan python 3.7
George Sp
4

Satu-satunya solusi yang bekerja pada Win 10 dengan sempurna.

import matplotlib.pyplot as plt

plt.plot(x_data, y_data)

mng = plt.get_current_fig_manager()
mng.window.state("zoomed")
plt.show()
Zeds Zen
sumber
4

Upaya terbaik saya sejauh ini, mendukung backend yang berbeda:

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)
Martin R.
sumber
3

Menekan ftombol (atau ctrl+fdi 1.2rc1) ketika difokuskan pada plot akan layar penuh jendela plot. Tidak cukup maksimal, tapi mungkin lebih baik.

Selain itu, untuk benar-benar memaksimalkan, Anda perlu menggunakan perintah khusus GUI Toolkit (jika ada untuk backend spesifik Anda).

HTH

pelson
sumber
Ini menjelaskan tombol mana yang terus saya tekan secara tidak sengaja yang membuat jendela saya menjadi layar penuh! (Dan bagaimana cara membatalkannya.)
cxrodgers
2

Dalam versi saya (Python 3.6, Eclipse, Windows 7), potongan yang diberikan di atas tidak berfungsi, tetapi dengan petunjuk yang diberikan oleh Eclipse / pydev (setelah mengetik: mng.), Saya menemukan:

mng.full_screen_toggle()

Tampaknya menggunakan mng-commands tidak masalah hanya untuk pengembangan lokal ...

Antti A
sumber
2

Coba gunakan metode 'Figure.set_size_inches', dengan argumen kata kunci tambahan forward=True. Menurut dokumentasi , ini harus mengubah ukuran jendela gambar.

Apakah itu benar - benar terjadi akan tergantung pada sistem operasi yang Anda gunakan.

Roland Smith
sumber
2

Berikut adalah fungsi berdasarkan jawaban @ Pythonio. Saya merangkumnya menjadi fungsi yang secara otomatis mendeteksi backend mana yang digunakannya dan melakukan tindakan yang sesuai.

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()
ch271828n
sumber
1

Cobalah plt.figure(figsize=(6*3.13,4*3.13))untuk memperbesar plot.

Navin
sumber
1

Ok jadi inilah yang berhasil untuk saya. Saya melakukan seluruh opsi showMaximize () dan itu mengubah ukuran jendela Anda secara proporsional dengan ukuran gambar, tetapi tidak meluas dan 'pas' dengan kanvas. Saya menyelesaikan ini dengan:

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

plt.show()
ArmandduPlessis
sumber
0

Ini tidak selalu memaksimalkan jendela Anda, tetapi mengubah ukuran jendela Anda secara proporsional dengan ukuran gambar:

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

Ini mungkin juga membantu: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html

Blairg23
sumber
0

Berikut ini mungkin bekerja dengan semua backend, tetapi saya hanya mengujinya di 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()
MikeTeX
sumber
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()

Kemudian panggil fungsi maximize()sebelumnyaplt.show()

Adhun Thalekkara
sumber
Tidak berfungsi dengan 2 monitor. Ini hanya mengubah situs jendela ke ukuran layar (bukan ukuran monitor), dan juga tidak meletakkannya di piksel kiri atas layar. @ ch271828n solusi bekerja dengan baik
Alex
0

Untuk GTK3Agg backend , gunakan maximize()- terutama dengan huruf kecil m :

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

Diuji di Ubuntu 20.04 dengan Python 3.8.

shredEngineer
sumber
0

Untuk backend berbasis Tk (TkAgg), kedua opsi ini memaksimalkan & layar penuh jendela:

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

Saat membuat plot menjadi beberapa jendela, Anda perlu menulis ini untuk setiap jendela:

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

Di sini, kedua 'gambar' diplot di jendela terpisah. Menggunakan variabel seperti

figure_manager = plt.get_current_fig_manager()

mungkin tidak memaksimalkan jendela kedua, karena variabel masih mengacu pada jendela pertama.

CRTejaswi
sumber