Python kullanarak plt.show () penceresini büyütme


95

Sadece merak için aşağıdaki kodda bunu nasıl yapacağımı bilmek istiyorum. Bir cevap arıyordum ama faydasız.

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 üzerinde çalışan spoiler: plt.get_current_fig_manager().window.state('zoomed')sonra plt.show().
Basj

1
benim için çalışmıyor
Johan

Yanıtlar:


37

Genellikle kullanırım

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

aramadan önce ve plt.show()büyütülmüş bir pencere alıyorum. Bu yalnızca 'wx' arka ucu için çalışır.

DÜZENLE:

Qt4Agg arka uç için, kwerenda Görelim cevabı .


66
Bunu kullanarak mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'Matplotlib 1.2.0
Junuxx

2
Arka uç wx ile çalışıyor, yazıyı buna göre güncelledim. Muhtemelen kullandığınız Tk arka ucu bu özelliği desteklemiyordur. Matplotlib arka ucunu 'wx' olarak değiştirme seçeneğiniz var mı?
gg349

11
mac hatası: mng.frame.Maximize (True) AttributeError: 'FigureManagerMac' nesnesinin 'frame' niteliği yok
user391339

7
Bunu MacOSXarka uçta yapmanın bilinen bir çözümü var mı ? FigureManagerMacNiteliği ne var gibi gözüküyor windowne de frame.
McLawrence

3
Windows'ta da aynı sorunu
yaşıyorum

169

Python 2.7.5 ve Matplotlib 1.3.1 çalıştıran bir Windows (WIN7) kullanıyorum.

Aşağıdaki satırları kullanarak TkAgg, QT4Agg ve wxAgg için Figure pencerelerini büyütmeyi başardım:

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

Umarım önceki cevapların bu özeti (ve bazı eklemeler) çalışan bir örnekte (en azından Windows için) birleştirilir. Şerefe


7
### Ubuntu'da çalışıyor ??? >> windows üzerinde çalışmadı mng.resize (* mng.window.maxsize ()) # benim için linux üzerinde mükemmel çalışıyor
Daniele

1
@Daniele, çözümünüz Ubuntu'da TkAgg'de benim için çalışıyor. Teşekkürler! Ama ayrıştırmam biraz zaman aldı;) Belki "mng.resize ..." den önce her şeyden kurtulurum.
BenB

1
Hangi arka ucu kullandığınızı kontrol etmenin kolay bir yolu var mı? şimdi deneme sonu hatası kullanıldı.
Rutger Hofste

1
Maalesef, kodunuzu Qt5Agg ile denedim, yazdığım zaman figManager.window.showMaximized()maksimum tam ekran penceresi açıldı . Sonraki satır: plt.show()Veriyi normal boyutta bir pencerede gösteren başka bir pencere göster.
StayFoolish

3
Tk tabanlı çözüm benim için çalışmıyor: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04).
bluenote10

77

Qt arka ucu (FigureManagerQT) ile doğru komut:

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

1
Bu hala plt.show()sonrasını gerektirir . Yine de harika cevap, pencerelerde çalışıyor!
lucidbrot

'_tkinter.tkapp' nesnesinin bi özniteliği 'showMaximized' var. Her zaman daha Python fazla bir dilden bir şaka olduğuna ikna
HAL9000

1
@ HAL9000 İlk olarak, bu Qt4 için, Tk için değil. İkincisi, harici bir paket tasarımı sorunu için dili suçluyorsunuz. Bu tür bir sorunu herhangi bir dilde yaşayabilirsiniz.
Jeff Learman

Ben olsun AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'Windows üzerinde.
Basj

45

Bu, pencerenin TkAgg arka ucuyla Ubuntu 12.04 altında benim için tam ekranı açmasını sağlar:

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

6
Bunun birden fazla monitör kurulumunda garip etkileri olduğunu unutmayın. Pencere ekranı kaplamak yerine tüm monitörleri kullanacaktır.
user1202136

2
Bu, büyütülmüş bir pencere (ekranın kenarlarına yapışması gereken) oluşturmaz, ancak büyütülmüş boyutta, büyütülmemiş bir pencere oluşturur.
HelloGoodbye

Bu, Ubuntu 14.04'teki pencereyi de başarıyla en üst düzeye çıkarır ve üst çubuğu hepimizin bildiği düğmelerle tutar.
Irene

Ubuntu 16.04 ve linux nane üzerinde çalışır.
python2.7

@ user1202136 3 monitörlü bir kurulumda benim için iyi çalıştı.
Michael Litvin

40

Benim için yukarıdakilerin hiçbiri işe yaramadı. Matplotlib 1.3.1'i içeren Ubuntu 14.04 üzerinde Tk arka ucunu kullanıyorum.

Aşağıdaki kod, maksimize etme ile aynı olmayan, ancak amacıma güzel bir şekilde hizmet eden tam ekran bir çizim penceresi oluşturur:

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

1
Bu aynı zamanda benim için işe yarayan çözümdü (tam ekrana geçmesine rağmen, büyütülmüş pencereye değil). Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3 üzerinde çalışıyor.
CrossEntropy

1
Windows 10 x64, python 3.5'te Visual Studio 2015'te benim için çalıştı, ancak üst ekran piksellerinin üzerinde olduğu için şekli kapatmak için pencere kenarlığına erişemedim.
David Cuccia

1
Benim için bu da büyütülmüş bir pencere değil, tam ekran bir pencere yaratıyor. Normal pencerelerde olduğu gibi küçültme, büyütme / geri yükleme ve kapatma düğmelerini almadım ve kapatabilmek için görev çubuğundaki pencereye sağ tıklamam gerekti.
HelloGoodbye

1
Bu, her pencerede bulunan düğmeleri göstermeden tam ekrana geçer. Ubuntu 14.04'te denendi.
Irene

1
Raspbian (Jessie) bir cazibe gibi çalışma
anatol

37

Bu çalışmalıdır (en azından TkAgg ile):

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

(yukarıdakilerden uyarlanmıştır ve Tkinter'ı kullanarak, bir pencereyi gözle görülür şekilde yakınlaştırmadan kullanılabilir ekran boyutunu elde etmenin bir yolu var mı? )


1
Yaşasın! Bu benim için çalıştı; ekranın kenarlarına yapışan ve olması gerektiği gibi simge durumuna küçültme, büyütme / geri yükleme ve kapatma düğmelerine sahip büyütülmüş bir pencere oluşturur.
HelloGoodbye

1
Ancak, bunun işe yaradığını TkAggsöylüyorsun TkApp, değil mi?
HelloGoodbye

İyi yakalama (muhtemelen bir yazım hatası)! TkAgg, Tk için bir arka uçtur.
dinvlad

3
Bunu matplotlib 2 / python 3 için test ettim. Pencerelerin altında çalışır!
not_a_bot_no_really_82353

7

Bu biraz karmaşık ve muhtemelen taşınabilir değil, yalnızca hızlı ve kirli arıyorsanız kullanın. Rakamı ekrandan çok daha büyük olarak ayarlarsam, tam olarak tüm ekranı kaplar.

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

Aslında, Qt4Agg ile Ubuntu 16.04'te, ekrandan büyükse pencereyi (tam ekranı değil) büyütür. (İki monitörünüz varsa, yalnızca birinde maksimize eder).


Benim için çalışıyor! Ekranın boyutunu almaya çalıştığım gibi.
StayFoolish

7

Bunu Ubuntu'da tam ekran modu için buldum

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

6

Ben mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'de anlıyorum .

Sonra mnghas niteliklerine baktım ve şunu buldum:

mng.window.showMaximized()

Bu benim için çalıştı.

Yani aynı sorunu yaşayan insanlar için bunu deneyebilirsiniz.

Bu arada, Matplotlib sürümüm 1.3.1.


Teşekkürler! Bu çözüm benim için iyi çalıştı. Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3 üzerinde çalışıyor.
CrossEntropy

Bunun tam ekran bir pencere açacağını biliyorum, ancak grafiklerim yazdığımda ayrı bir pencerede açılacak plt.show(). Bu tam ekran pencerede değil, herhangi bir öneriniz var mı?
StayFoolish

Ayrıca Debian ve Qt arka uç üzerinde python 3.6 üzerinde de çalışır.
pbalaga

bu, python 3.7 ile Windows 10 64bit'te çalışmaz
George Sp

4

Win 10 üzerinde kusursuz çalışan tek çözüm.

import matplotlib.pyplot as plt

plt.plot(x_data, y_data)

mng = plt.get_current_fig_manager()
mng.window.state("zoomed")
plt.show()

4

Farklı arka uçları destekleyen şu ana kadarki en iyi çabam:

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

Bir grafiğe odaklandığında ftuşuna (veya ctrl+f1.2rc1'de) basmak bir çizim penceresini tam ekran olarak gösterecektir. Tam olarak maksimize etmiyor, ama belki daha iyi.

Bunun dışında, gerçekten maksimize etmek için GUI Toolkit'e özgü komutları kullanmanız gerekecektir (eğer özel arka uç için mevcutlarsa).

HTH


Bu, yanlışlıkla pencerelerimi tam ekran yapan hangi tuşa bastığımı açıklıyor! (Ve nasıl geri alınır?)
cxrodgers

2

Sürümlerimde (Python 3.6, Eclipse, Windows 7), yukarıda verilen snippet'ler çalışmadı, ancak Eclipse / pydev tarafından verilen ipuçlarıyla (yazdıktan sonra: mng.), Buldum:

mng.full_screen_toggle()

Görünüşe göre mng komutlarını kullanmak sadece yerel geliştirme için uygun ...


2

Ekstra anahtar kelime argümanıyla 'Figure.set_size_inches' yöntemini kullanmayı deneyin forward=True. Göre belgeler , bu olmalıdır rakam penceresini yeniden boyutlandırmak.

Bunun gerçekten olup olmayacağı, kullandığınız işletim sistemine bağlı olacaktır.


2

İşte @ Pythonio'nun cevabına dayalı bir işlev. Bunu, hangi arka ucu kullandığını otomatik olarak algılayan ve karşılık gelen eylemleri yapan bir işleve özetliyorum.

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

Konuyu plt.figure(figsize=(6*3.13,4*3.13))büyütmeye çalışın .


1

Tamam, bu benim için işe yarayan şeydi. Tüm showMaximize () seçeneğini yaptım ve pencerenizi şeklin boyutuyla orantılı olarak yeniden boyutlandırıyor, ancak tuvali genişletmiyor ve 'sığdırmıyor'. Bunu şu şekilde çözdüm:

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

plt.show()

0

Bu, pencerenizi mutlaka büyütmez, ancak pencerenizi şeklin boyutuyla orantılı olarak yeniden boyutlandırır:

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

Bu ayrıca yardımcı olabilir: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html


0

Aşağıdakiler tüm arka uçlarla çalışabilir, ancak bunu yalnızca QT'de test ettim:

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

Ardından maximize()önce işlevi çağırınplt.show()


2 monitörle çalışmaz. Yalnızca pencere sitesini ekran boyutuna (monitör boyutuna değil) değiştirir ve ayrıca onu ekranın sol üst pikseline koymaz. @ ch271828n çözümü iyi çalıştı
Alex,

0

Arka uç GTK3Agg için kullanın maximize()- özellikle küçük harf m ile :

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

Ubuntu 20.04'te Python 3.8 ile test edilmiştir.


0

Tk tabanlı arka uç (TkAgg) için, bu iki seçenek pencereyi büyütür ve tam ekran yapar:

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

Birden fazla pencereye çizim yaparken, her pencere için bunu yazmanız gerekir:

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

Burada, her iki 'şekil' ayrı pencerelerde çizilmiştir. Gibi bir değişken kullanma

figure_manager = plt.get_current_fig_manager()

değişken hala ilk pencereye atıfta bulunduğundan, ikinci pencereyi büyütmeyebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.