पायथन का उपयोग करके एक plt.show () विंडो को अधिकतम कैसे करें


94

बस जिज्ञासा के लिए मैं यह जानना चाहूंगा कि नीचे दिए गए कोड में यह कैसे करना है। मैं एक उत्तर की तलाश कर रहा हूं लेकिन बेकार है।

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, Windows पर काम कर रहा है: plt.get_current_fig_manager().window.state('zoomed')तब plt.show()
बसज

1
मेरे लिए काम नहीं करता है
जोहान

जवाबों:


37

मैं आमतौर पर उपयोग करता हूं

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

कॉल करने से पहले plt.show(), और मुझे एक अधिकतम विंडो मिलती है। यह केवल 'wx' बैकएंड के लिए काम करता है।

संपादित करें:

Qt4Agg बैकएंड के लिए, kwerenda का उत्तर देखें ।


65
इसका उपयोग करते हुए, मैं mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'Matplotlib 1.2.0
Junuxx

2
यह बैकएंड wx के साथ काम करता है, मैंने तदनुसार पोस्ट अपडेट की है। संभवतः आपके द्वारा उपयोग किया जा रहा Tk बैकएंड इस सुविधा का समर्थन नहीं करता है। क्या आपके पास matplotlib backend को 'wx' में बदलने का विकल्प है?
gg349

11
मैक पर त्रुटि: mng.frame.Maximize (सच्चा) गुण: 'चित्रमंजरम' ऑब्जेक्ट में कोई विशेषता नहीं है 'फ्रेम'
user391339

7
क्या MacOSXबैकेंड पर ऐसा करने के लिए एक ज्ञात समाधान है ? FigureManagerMacन विशेषता करने लगता है windowऔर न ही frame
मैकलावेंस

2
मेरे पास विंडोज पर एक ही मुद्दा है
रोलरॉल

170

मैं एक Windows (WIN7) पर हूं, पायथन 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()

उम्मीद है कि पिछले जवाबों (और कुछ अतिरिक्त) के इस सारांश में एक काम करने वाले उदाहरण (कम से कम खिड़कियों के लिए) में संयुक्त मदद करता है। चियर्स


7
### उबंटू पर काम करता है ??? >> विंडोज़ पर काम नहीं कर रहा था mng.resize (* mng.window.maxsize ()) #works मेरे लिए लिनक्स पर एकदम सही है
Daniele

1
@ डेनियल, आपका समाधान मेरे लिए उबंटू के टीकेएजी पर काम करता है। धन्यवाद! लेकिन मुझे पार्स करने में थोड़ा समय लगा;) शायद "mng.resize ..." से पहले सब कुछ खत्म हो जाए।
बेनबी

1
क्या आपके द्वारा उपयोग किए जा रहे बैकएंड की जांच करने का एक आसान तरीका है? थोड़े अब परीक्षण अंत त्रुटि का इस्तेमाल किया।
रटगेर हॉस्टस्टीन

1
दुर्भाग्य से, मैंने Qt5Agg के साथ आपके कोड की कोशिश की, जब मैं टाइप करता हूं figManager.window.showMaximized(), तो अधिकतम फुलस्क्रीन विंडो बस पॉप अप हो जाती है। अगली पंक्ति: plt.show()बस एक और विंडो दिखाएं जो डेटा को सामान्य आकार की विंडो में प्लॉट करती है।
स्टेफिशिश

3
Tk आधारित समाधान मेरे लिए काम नहीं करता है: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04)।
bluenote10

78

Qt बैकएंड के साथ (चित्र प्रबंधक) उचित आदेश है:

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

1
इसके plt.show()बाद भी आवश्यकता है। शानदार जवाब हालांकि, खिड़कियों पर काम करता है!
ल्यूसिडब्रॉट

'_tkinter.tkapp' ऑब्जेक्ट में bi विशेषता 'showMaximized' है। हमेशा इस बात पर अधिक आश्वस्त होते हैं कि पायथन एक भाषा से अधिक एक मजाक है
HAL9000

1
@ HAL9000 सबसे पहले, यह Qt4 के लिए है, Tk नहीं। दूसरा, आप बाहरी पैकेज डिज़ाइन समस्या के लिए भाषा को दोष दे रहे हैं। आप किसी भी भाषा में इस तरह का मुद्दा रख सकते हैं।
जेफ लीमैन

44

यह विंडो को मेरे लिए पूर्ण स्क्रीन तक ले जाता है, Ubuntu 12.04 के तहत TkAgg बैकएंड के साथ:

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

6
ध्यान दें कि यह कई मॉनिटर सेटअप पर अजीब प्रभाव डालता है। विंडो अधिकतम होने के बजाय सभी मॉनिटर का उपयोग करेगी।
user1202136

2
यह एक अधिकतम विंडो नहीं बनाएगा (जिसे स्क्रीन के किनारों पर स्नैप करना चाहिए), लेकिन एक अधिकतम आकार के साथ एक गैर-अधिकतम विंडो बनाएँ।
HelloGoodbye

यह सफलतापूर्वक उबंटू 14.04 में भी खिड़की को अधिकतम करता है, शीर्ष बार को उन बटनों के साथ रखता है जो हम सभी जानते हैं।
इरीन

Ubuntu 16.04 और लिनक्स टकसाल पर काम करता है। python2.7 ने परीक्षण किया
user1941407

@ user1202136 3-मॉनिटर सेटअप में मेरे लिए ठीक काम किया।
माइकल लिट्विन

41

मेरे लिए उपरोक्त में से कुछ भी काम नहीं किया। मैं Ubuntu 14.04 पर Tk बैकएंड का उपयोग करता हूं जिसमें 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, अजगर 2.7.10, matplotlib 1.4.3 पर चल रहा है।
CrossEntropy

1
मेरे लिए विजुअल स्टूडियो 2015 में विंडोज 10 x64, अजगर 3.5 पर काम किया गया था, सिवाय इसके कि मैं विंडो बॉर्डर तक पहुंच नहीं सका, क्योंकि यह टॉप स्क्रीन पिक्सल के ऊपर था।
डेविड क्यूकेया

1
मेरे लिए, यह या तो अधिकतम विंडो नहीं बनाता है, लेकिन एक पूर्ण स्क्रीन। मुझे कोई न्यूनतम नहीं मिला, अधिकतम / नीचे और बंद बटन को सामान्य विंडो के रूप में पुनर्स्थापित करना पड़ा और मुझे इसे बंद करने में सक्षम होने के लिए टास्कबार पर विंडो पर राइट-क्लिक करना पड़ा।
हैलोगूडीबाई

1
यह पूरी स्क्रीन को दिखाता है बिना बटन के जो हर विंडो में है। उबुन्टु 14.04 पर कोशिश की।
इरीन

1
रास्पियन (जेसी) पर एक आकर्षण की तरह काम कर रहा है
एनाटोल

37

यह काम करना चाहिए ( कम से कम TkAgg के साथ):

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

(ऊपर से अपनाया गया और टिंकर का उपयोग करके, क्या खिड़की को देखने के बिना प्रयोग करने योग्य स्क्रीन आकार प्राप्त करने का एक तरीका है? )


1
वाह! इसने मेरे लिए काम किया; यह एक अधिकतम विंडो बनाता है जो स्क्रीन के किनारों पर जाता है और इसमें न्यूनतम, अधिकतम / पुनर्स्थापना और बंद बटन को बंद करना चाहिए जैसा कि यह होना चाहिए।
हैलोगुडेबी

1
हालांकि, अगर आप मतलब के साथ कि इस काम करता है TkAgg, नहीं TkApp, है ना?
हैलोगूडीबाई

अच्छी पकड़ (शायद एक टाइपो)! TkAgg Tk का बैकएंड है।
दिनेवलाद

3
बस इसे matplotlib 2 / python 3 के लिए टेस्ट किया। खिड़कियों के नीचे काम करता है!
not_a_bot_no_really_82353

7

यह एक प्रकार का हैकी है और शायद पोर्टेबल नहीं है, इसका उपयोग केवल तभी करें जब आप त्वरित और गंदे दिख रहे हों। अगर मैं सिर्फ स्क्रीन की तुलना में बहुत बड़ा आंकड़ा सेट करता हूं, तो यह पूरी स्क्रीन को ले लेता है।

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

वास्तव में, Qt4Agg के साथ उबंटू में 16.04, यह विंडो को अधिकतम करता है (पूर्ण-स्क्रीन नहीं) यदि यह स्क्रीन से बड़ा है। (यदि आपके पास दो मॉनिटर हैं, तो यह इसे उनमें से एक पर अधिकतम करता है)।


मेरे लिये कार्य करता है! जैसा कि मैं स्क्रीन का आकार प्राप्त करने की कोशिश कर रहा हूं।
स्टेफिशिश


6

मैं भी मिलता हूं mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'

फिर मैंने देखा कि विशेषताओं के माध्यम से mngहै, और मैंने पाया:

mng.window.showMaximized()

मेरे लिए वह काम कर गया।

तो जो लोग एक ही परेशानी के लिए है, आप यह कोशिश कर सकते हैं।

वैसे, मेरा Matplotlib संस्करण 1.3.1 है।


धन्यवाद! इस समाधान ने मेरे लिए अच्छा काम किया। Redhat Enterprise Linux 6, अजगर 2.7.10, matplotlib 1.4.3 पर चल रहा है।
CrossEntropy

मुझे पता है कि यह एक फुलस्क्रीन विंडो को पॉप अप करेगा, लेकिन जब मैं टाइप करता हूं तो मेरे प्लॉट एक अलग विंडो में आ जाएंगे plt.show()। इस फुलस्क्रीन विंडो पर नहीं, कोई सुझाव?
स्टेफिशिश

यह डेबियन पर अजगर 3.6 पर और क्यूटी बैकेंड के साथ भी काम करता है।
पबलगा

यह विंडोज़ 10 पर नहीं चलता है 64 python 3.7 के साथ
जॉर्ज स्प

4

एक समाधान जो विन 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+f1.2rc1 में) दबाने से एक भूखंड की खिड़की फ़ुलस्क्रीन हो जाएगी। काफी अधिकतम नहीं है, लेकिन शायद बेहतर।

इसके अलावा, वास्तव में अधिकतम करने के लिए, आपको जीयूआई टूलकिट विशिष्ट कमांड (यदि वे आपके विशिष्ट बैकेंड के लिए मौजूद हैं) का उपयोग करने की आवश्यकता होगी।

HTH


यह बताता है कि किस कुंजी को मैंने गलती से रखा है जो मेरी खिड़कियों को पूरी तरह से बंद कर दे! (और इसे पूर्ववत कैसे करें।)
cxrodgers

2

मेरे संस्करणों में (पायथन 3.6, एक्लिप्स, विंडोज 7), ऊपर दिए गए स्निपेट्स काम नहीं करते थे, लेकिन एक्लिप्स / पाइदेव द्वारा दिए गए संकेत के साथ (टाइप करने के बाद: mng।), मैंने पाया:

mng.full_screen_toggle()

ऐसा लगता है कि केवल स्थानीय विकास के लिए mng-कमांड का उपयोग करना ठीक है ...


2

अतिरिक्त कीवर्ड तर्क के साथ 'चित्र.सेट_साइज़_ इंच' पद्धति का उपयोग करने का प्रयास करें forward=Trueप्रलेखन के अनुसार , यह आंकड़ा विंडो का आकार बदलना चाहिए

क्या वास्तव में ऐसा होता है कि आप जिस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं, उस पर निर्भर करेगा।


2

यहाँ @ पायथनियो के उत्तर पर आधारित एक समारोह है। मैं इसे एक फ़ंक्शन में इनकैप्सुलेट करता हूं जो स्वचालित रूप से पता लगाता है कि यह किस बैकेंड का उपयोग कर रहा है और संबंधित क्रियाएं करता है।

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

ठीक है तो यह मेरे लिए काम किया है। मैंने पूरा शोमैक्सिमाइज़ () विकल्प किया और यह आपकी विंडो को आकृति के आकार के अनुपात में आकार देता है, लेकिन यह कैनवास का विस्तार और 'फिट' नहीं करता है। मैंने इसे हल किया:

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

निम्नलिखित सभी बैकएंड के साथ काम कर सकता है, लेकिन मैंने इसे केवल क्यूटी पर परीक्षण किया:

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 समाधान ने ठीक काम किया
एलेक्स

0

GTK3Agg के बैकएंड के लिए , maximize()विशेष रूप से - कम केस m के साथ :

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

पाइथन 3.8 के साथ उबंटू 20.04 में परीक्षण किया गया।


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

दूसरी विंडो को अधिकतम नहीं किया जा सकता है, क्योंकि चर अभी भी पहली विंडो को संदर्भित करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.