Pythonを使用してplt.show()ウィンドウを最大化する方法


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 2018

1
私にはうまく
Johan

回答:


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 2012

2
バックエンドwxで動作し、それに応じて投稿を更新しました。使用しているTkバックエンドがこの機能をサポートしていない可能性があります。matplotlibバックエンドを「wx」に変更するオプションはありますか?
gg349 2012

11
Macでのエラー:mng.frame.Maximize(True)AttributeError: 'FigureManagerMac'オブジェクトに属性 'frame'がありません
user391339 2016年

7
MacOSXバックエンドでこれを行うための既知の解決策はありますか?FigureManagerMac属性どちらを持っているようだwindowframe
マクローレンス2018

3
私はWindowsで同じ問題を抱えています
RollRoll 2018年

169

私はWindows(WIN7)を使用しており、Python2.7.5とMatplotlib1.3.1を実行しています。

次の行を使用して、TkAgg、QT4Agg、およびwxAggのFigureウィンドウを最大化することができました。

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())#Linuxで完璧に動作します
Daniele

1
@Daniele、あなたのソリューションはUbuntuのTkAggで私のために機能します。ありがとう!しかし、解析するのに少し時間がかかりました;)「mng.resize ...」の前にすべてを取り除くかもしれません。
BenB 2015年

1
使用しているバックエンドを確認する簡単な方法はありますか?ちょっとトライアル終了エラーを使用しました。
Rutger Hofste 2016年

1
残念ながら、Qt5Aggでコードを試しましたが、入力するfigManager.window.showMaximized()と、最大化されたフルスクリーンウィンドウがポップアップしました。次の行:plt.show()通常のサイズのウィンドウにデータをプロットする別のウィンドウを表示するだけです。
StayFoolish 2017

3
Tkベースのソリューションは私には機能しません:_tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu16.04)。
bluenote10 2018

77

Qtバックエンド(FigureManagerQT)の場合、適切なコマンドは次のとおりです。

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

1
これはplt.show()後でまだ必要です。素晴らしい答えですが、Windowsで動作します!
lucidbrot 2018

'_tkinter.tkapp'オブジェクトにはbi属性 'showMaximized'があります。Pythonは言語以上のジョークであると常に確信しています
HAL90 0019

1
@ HAL9000まず、これはTkではなくQt4用です。第二に、あなたは外部パッケージデザインの問題について言語を非難しているのです。この種の問題はどの言語でも発生する可能性があります。
JeffLearman19年

AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'はWindowsに乗ります。
Basj8

44

これにより、TkAggバックエンドを備えたUbuntu 12.04で、ウィンドウが全画面表示になります。

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

6
これは、複数のモニターのセットアップに奇妙な影響を与えることに注意してください。ウィンドウは最大化されるのではなく、すべてのモニターを使い果たします。
user1202136 2013

2
これにより、最大化されたウィンドウ(画面の端にスナップする必要があります)は作成されませんが、最大化されたウィンドウのサイズで最大化されていないウィンドウが作成されます。
ハローグッバイ2017

これにより、Ubuntu 14.04でもウィンドウが最大化され、トップバーにボタンが表示されたままになります。
アイリーン

Ubuntu16.04とLinuxmintで動作します。python2.7テスト済み
user1941407 2018

@ user12021363モニターのセットアップで問題なく動作しました。
Michael Litvin

40

私にとって、上記のどれもうまくいきませんでした。matplotlib1.3.1を含むUbuntu14.04でTkバックエンドを使用しています。

次のコードは、最大化と同じではないフルスクリーンプロットウィンドウを作成しますが、それは私の目的をうまく果たします。

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、matplotlib1.4.3で実行されています。
CrossEntropy 2015

1
Windows 10 x64、python3.5のVisualStudio 2015内で動作しましたが、ウィンドウの境界線にアクセスして図を閉じることができなかった点が異なります。これは、画面の上部のピクセルの上にあったためです。
David Cuccia 2016

1
私にとって、これは最大化されたウィンドウを作成するのではなく、フルスクリーンのウィンドウを作成します。通常のウィンドウのように最小化、最大化/復元、および閉じるボタンが表示されなかったため、タスクバーのウィンドウを右クリックして閉じる必要がありました。
ハローグッバイ2017

1
これは、すべてのウィンドウにあるボタンを表示せずに全画面表示になります。Ubuntu14.04で試してみました。
アイリーン


37

これは機能するはずです(少なくともTkAggでは):

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

(上記から採用され、Tkinter使用して、ウィンドウを視覚的にズームせずに使用可能な画面サイズを取得する方法はありますか?


1
わーい!これは私にとってはうまくいきました。画面の端にスナップする最大化されたウィンドウを作成し、最小化、最大化/復元、および閉じるボタンが必要に応じて表示されます。
ハローグッバイ2017

1
しかし、これはでTkAggはなくTkApp、で機能するということですか?
ハローグッバイ2017

良いキャッチ(おそらくタイプミス)!TkAggはTkのバックエンドです。
dinvlad 2017

3
これをmatplotlib2 / python3でテストしました。窓の下で動作します!
not_a_bot_no_really_82353

7

これは一種のハッキーで、おそらくポータブルではありません。すばやく汚れたものを探している場合にのみ使用してください。画面よりもはるかに大きな数字を設定すると、画面全体が正確に表示されます。

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

実際、Qt4Aggを搭載したUbuntu 16.04では、ウィンドウが画面よりも大きい場合、ウィンドウ(フルスクリーンではない)が最大化されます。(モニターが2つある場合は、そのうちの1つで最大化されます)。


私のために働く!画面のサイズを取得しようとしているので。
StayFoolish 2017


6

私も得mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'ます。

次に、属性mnghasを調べたところ、次のことがわかりました。

mng.window.showMaximized()

それは私のために働いた。

ですから、同じ問題を抱えている人は、これを試してみてください。

ちなみに、私のMatplotlibのバージョンは1.3.1です。


ありがとう!この解決策は私にとってうまくいきました。Redhat Enterprise Linux 6、python 2.7.10、matplotlib1.4.3で実行されています。
CrossEntropy 2015

これによりフルスクリーンウィンドウがポップアップすることはわかっていますが、入力すると別のウィンドウにプロットが表示されますplt.show()。このフルスクリーンウィンドウではありません、何か提案はありますか?
StayFoolish 2017

また、Debianのpython3.6およびQtバックエンドでも動作します。
pbalaga

これは、Python3.7を搭載したWindows10 64ビットでは実行されません
GeorgeSp19年

4

Win10で完璧に機能した1つのソリューション。

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では)、プロットウィンドウが全画面表示されます。完全に最大化するわけではありませんが、おそらくより良いでしょう。

それ以外に、実際に最大化するには、GUIツールキット固有のコマンドを使用する必要があります(特定のバックエンドに存在する場合)。

HTH


これは、ウィンドウを全画面表示にしたキーを誤って押し続けた理由を説明しています。(そしてそれを元に戻す方法。)
cxrodgers 2015

2

私のバージョン(Python 3.6、Eclipse、Windows 7)では、上記のスニペットは機能しませんでしたが、Eclipse / pydev(入力後:mng。)によって提供されたヒントを使用すると、次のことがわかりました。

mng.full_screen_toggle()

mng-commandsの使用は、ローカル開発でのみ問題ないようです...


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

plt.figure(figsize=(6*3.13,4*3.13))プロットを大きくしてみてください。


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

Python3.8を使用してUbuntu20.04でテスト済み。


0

Tkベースのバックエンド(TkAgg)の場合、次の2つのオプションでウィンドウを最大化して全画面表示します。

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

変数はまだ最初のウィンドウを参照しているため、2番目のウィンドウを最大化しない可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.