matplotlibで描いた図形のサイズをどのように変更しますか?


2036

matplotlibで描いた図形のサイズをどのように変更しますか?


741
plt.figure(figsize=(20,10))
StackG 2015

307
またはfig, ax = plt.subplots(figsize=(20, 10))
alexw 2016年

100
Figureのサイズがピクセルであると考えて、(800,600)を指定すると、プログラムがクラッシュしました。単位はインチですのでご注意ください。
Raja

2
@alexwこれはドキュメントにありますか?
liang

48
fig = plt.gcf()-> fig.set_size_inches(11,8)混乱を避けるためです。
Ufos

回答:


1099

は、呼び出しの署名を示しています。

from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

figure(figsize=(1,1)) 別のdpi引数も指定しない限り、80×80ピクセルのインチごとの画像が作成されます。


95
すでに図を作成している場合は、「図1」(pyplotを使用している場合のデフォルトの図)とすると、figure(num = 1、figsize =(8、6)、...)を使用できます。サイズなどを変更するには。pyplot/ pylab show()を使用してポップアップウィンドウを作成する場合は、何かをプロットfigure(num=1,...) する前に呼び出す必要があります-何かを描くとすぐにpyplot / pylabが図を作成し、ポップアップのサイズが表示されますこの時点で修正されます。
drevicko 2013

22
デフォルトの引数を削除した方がよいと思います。S / N比を不必要に低下させます。
frmsaul 2017

3
これは、DPIを1に設定した場合、figsizeがインチ単位ではなくピクセル単位になることを意味しますか?これは、WebおよびGUIインターフェースでmatplotlibを使用する場合により便利です。
CMCDragonkai 2017

1
figsize(1,1)を使用すると、画像の比率は1:1になりますか?私のすべての円グラフは楕円形を示しているので、それらを丸めるために私が見つけた唯一の方法はplot.axis( "equals")を使用することでした。彼らは同じ効果をもたらすでしょうか、それとも異なる振る舞いをしますか?
Breno Baiardi 2017年

2
@BrenoBaiardiこの質問はフィギュアのサイズについてです。図全体が1:1であっても、図の上にある軸のアスペクト比は等しくない場合があります。また、軸ボックスが1:1の場合でも、データはx方向とy方向で異なってスケーリングされます。したがって、いいえ、そのコマンドは等しいアスペクト比を保証しません。
Jouni K.Seppänen2017年

741

すでに図を作成している場合は、これをすばやく実行できます。

fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)

サイズの変更を既存のGUIウィンドウに反映させるには forward=True

fig.set_size_inches(18.5, 10.5, forward=True)

3
の問題を解決しましたimshow。今、プロットエリアの周りのスペースをで削除した直後にこのコードを使用していますplt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
heltonbiker、

7
同様に、を実行できますfig.set_dpi(100)
Erik Shilts、2015年

1
OS Xでipython 3.7、matplotlib 3.0.3を使用しています。図のサイズを調整できますが、ウィンドウのサイズが変更されません(図のキャンバスは調整されますが、ウィンドウはキャンバスに合わせて拡大または縮小されません)。forward = Trueキーワード引数は、このプラットフォームに意図した影響を与えていないようです。
K.ニールソン

google colaboratoryでのこの作業
carlosaar22

355

非推奨のメモ:公式のMatplotlibガイド
に従って、モジュールの使用は推奨されなくなりました。この別の回答で説明されているように、代わりにモジュールの使用を検討してください。pylabmatplotlib.pyplot

以下はうまくいくようです:

from pylab import rcParams
rcParams['figure.figsize'] = 5, 10

これにより、図の幅は5インチ、高さは10 インチになります。

次に、Figureクラスは、これを引数の1つのデフォルト値として使用します。


3
これは、(--pylab = inlineが指定されている)iPythonノートブックの最上部でもうまく機能し、最上位レベルで既にrcParamsがインポートされています。
nealmcb 2013

4
これは、pyplotおよびQtバックエンドへのOOインターフェースを備えたWindowsマシンでは機能しませんでした。fig.set_size_inches(18.5, 10.5, forward=True)働いた。
ベネットブラウン

2
この回答は現在、Metaで
Mischa

Pythonバージョン:3.6.4、matplotlib:2.2.3リストまたはタプルを渡す必要があると思います。例:rcParams ['figure.figsize'] =(5、10)
Steve Gon

2
なぜこれが初めてセルを実行するときに機能しないのか知っていますか?
g07kore

314

plt.rcParamsの使用

Figure環境を使用せずにサイズを変更したい場合に備えて、この回避策もあります。plt.plot()たとえば、使用している場合は、幅と高さのタプルを設定できます。

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)

これは、インラインでプロットする場合(IPython Notebookなど)に非常に役立ちます。@asamaierが気づいたように、このステートメントをimportsステートメントの同じセルに配置しないことが望ましいです。

cmへの変換

figsizeあなたは2.54でそれらを分割する必要がありセンチでそれを設定したい場合に見ていてタプルはインチを受け入れ、この質問を


4
優秀な!一度設定して複数回プロットする場合にも便利です。

何らかの理由で、これはJupyter Notebookでは機能しないようです(以前は使用されていました)。
Ray

@RayあなたのJupyterノートブックのバージョンとそれが機能する私のための動作を書いてくれますか
GM

@GMが前回テストしたとき、それはWindows 10およびGoogle Chrome 63.0.3239.84上のAnacondaのJupyterバージョン4.3.0およびPython 3.6.2でした。
Ray

8
これを機能させるにplt.rcParams["figure.figsize"] = (20,3)は、追加のセルを呼び出す必要があります。importステートメントと同じセルで呼び出すと、無視されます。
2018年

269

次の簡単なコードを試してください:

from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()

プロットする前に、Figureのサイズを設定する必要があります。


14
この答えは、それがm atplotlib.pyplot.figureであることを教えてくれます。私のような事をしようとしておくmatplotlib.figurematplotlib.figure.Figure
リンドンホワイト

「_tkinter.TclError:画像バッファに十分な空きメモリがありません」
Cerin

5
plt.figure(figsize=(1,1))核心の動きです。ありがとうございました。
ximiki

jupyterノートブックでは、これは私にとってうまくいきました:plt.figure(figsize =(20,10))
Abhishek Poojary

jupyter Notebookを使用している場合は、他のpltコマンドの前にplt.figure(figsize =(15、10))を使用していることを確認してください。
Yuhang Lin

90

Pandasで図のサイズを変更する方法を探している場合は、次のようにできます。

df['some_column'].plot(figsize=(10, 5))

どこdfパンダのデータフレームです。または、既存のFigureまたは軸を使用するには

fig, ax = plt.subplots(figsize=(10,5))
df['some_column'].plot(ax=ax)

デフォルトの設定を変更したい場合は、次のようにします。

import matplotlib

matplotlib.rc('figure', figsize=(10, 5))

73

Googleの最初のリンク'matplotlib figure size'AdjustingImageSizeページのGoogleキャッシュ)です。

上記のページのテストスクリプトを次に示します。test[1-3].png同じ画像の異なるサイズのファイルを作成します。

#!/usr/bin/env python
"""
This is a small demo file that helps teach how to adjust figure sizes
for matplotlib

"""

import matplotlib
print "using MPL version:", matplotlib.__version__
matplotlib.use("WXAgg") # do this before pylab so you don'tget the default back end.

import pylab
import numpy as np

# Generate and plot some simple data:
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)

pylab.plot(x,y)
F = pylab.gcf()

# Now check everything with the defaults:
DPI = F.get_dpi()
print "DPI:", DPI
DefaultSize = F.get_size_inches()
print "Default size in Inches", DefaultSize
print "Which should result in a %i x %i Image"%(DPI*DefaultSize[0], DPI*DefaultSize[1])
# the default is 100dpi for savefig:
F.savefig("test1.png")
# this gives me a 797 x 566 pixel image, which is about 100 DPI

# Now make the image twice as big, while keeping the fonts and all the
# same size
F.set_size_inches( (DefaultSize[0]*2, DefaultSize[1]*2) )
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test2.png")
# this results in a 1595x1132 image

# Now make the image twice as big, making all the fonts and lines
# bigger too.

F.set_size_inches( DefaultSize )# resetthe size
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test3.png", dpi = (200)) # change the dpi
# this also results in a 1595x1132 image, but the fonts are larger.

出力:

using MPL version: 0.98.1
DPI: 80
Default size in Inches [ 8.  6.]
Which should result in a 640 x 480 Image
Size in Inches [ 16.  12.]
Size in Inches [ 16.  12.]

2つのメモ:

  1. モジュールのコメントと実際の出力は異なります。

  2. この答えにより、3つの画像すべてを1つの画像ファイルに簡単に結合して、サイズの違いを確認できます。


7
それを行う方法を思い出そうとするたびに、私はこの投稿に行き着きます。:だから、これは私が通常を探していたコードであるfig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
y.selivonchyk

45

単純に使用できます(matplotlib.figure.Figureから):

fig.set_size_inches(width,height)

Matplotlib 2.0.0以降、forwardキーワードのデフォルトTrueはなので、キャンバスへの変更はすぐに表示さます。

高さだけを変えたい場合を両方ではなくは、

fig.set_figwidth(val) または fig.set_figheight(val)

これらはすぐにキャンバスも更新しますが、Matplotlib 2.2.0以降のみです。

古いバージョンの場合

forward=True上で指定したものより古いバージョンでキャンバスをライブ更新するには、明示的に指定する必要があります。set_figwidthおよびset_figheight関数はforward、Matplotlib 1.5.0より前のバージョンのパラメーターをサポートしていないことに注意してください。


45
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()

次のものも使用できます。

fig, ax = plt.subplots(figsize=(20, 10))

31

fig = ...行をコメントアウトしてみてください

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2

fig = plt.figure(figsize=(18, 18))
plt.scatter(x, y, s=area, alpha=0.5)
plt.show()

21

これは私にとってうまくいきます:

from matplotlib import pyplot as plt

F = plt.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


16

FigureのサイズをN倍にするには、これをpl.show()の直前に挿入する必要があります。

N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )

また、ipythonノートブックでも正常に動作します。


10

Matplotlib メトリックシステムをネイティブで使用できないため、図のサイズをセンチメートルなどの適切な長さの単位で指定する場合は、次のようにします(gns-ankのコード)。

def cm2inch(*tupl):
    inch = 2.54
    if isinstance(tupl[0], tuple):
        return tuple(i/inch for i in tupl[0])
    else:
        return tuple(i/inch for i in tupl)

それからあなたは使うことができます:

plt.figure(figsize=cm2inch(21, 29.7))

8

これは、図形が描画された直後でも、図形のサイズを変更します(少なくとも、matplotlib 1.4.0でQt4Agg / TkAggを使用しますが、MacOSXは使用しません)。

matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)

7

サイホデリアの答えを一般化し、簡略化します。フィギュアの現在のサイズを係数で変更したい場合sizefactor

import matplotlib.pyplot as plt

# here goes your code

fig_size = plt.gcf().get_size_inches() #Get current size
sizefactor = 0.8 #Set a zoom factor
# Modify the current size by the factor
plt.gcf().set_size_inches(sizefactor * fig_size) 

現在のサイズを変更した後、サブプロットレイアウトを微調整しなければならない場合があります。これは、FigureウィンドウのGUIで、またはコマンドsubplots_adjustを使用して行うことができます。

例えば、

plt.subplots_adjust(left=0.16, bottom=0.19, top=0.82)

5

別のオプション、matplotlibでrc()関数を使用する(単位はインチ)

import matplotlib
matplotlib.rc('figure', figsize=[10,5])

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