matplotlib로 그린 그림의 크기를 어떻게 변경합니까?


2035

matplotlib로 그린 그림의 크기를 어떻게 변경합니까?


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

306
또는fig, ax = plt.subplots(figsize=(20, 10))
alexw

99
그림 크기가 픽셀 단위라고 생각하면서 (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 인수를 지정하지 않는 한 인치 단위 이미지를 생성합니다.


95
그림을 이미 만든 경우 '그림 1'(Pyplot을 사용할 때 기본 값)이라고 말하면 figure (num = 1, figsize = (8, 6), ...)를 사용할 수 있습니다. pyplot / pylab show()을 사용하고 팝업 창을 만들려면 아무것도 플롯 figure(num=1,...) 하기 전에 호출 해야 합니다. pyplot / pylab은 무언가를 그리 자마자 그림을 만들고 팝업 크기가 나타납니다. 이 시점에서 수정해야합니다.
drevicko

22
기본 인수를 제거하면 답이 더 좋을 것 같습니다. 불필요하게 신호 대 잡음비를 줄입니다.
frmsaul

3
DPI를 1로 설정하면 figsize가 인치 단위가 아닌 픽셀 단위가됩니까? 이것은 웹 및 GUI 인터페이스에서 matplotlib를 사용할 때 더 유용합니다.
CMCDragonkai

1
figsize (1,1)을 사용하면 이미지의 비율이 1 : 1입니까? 모든 원형 차트는 타원형으로 표시되므로 plot.axis ( "equals")를 사용하여 원형으로 만들 수있었습니다. 그들은 같은 효과가 있거나 다르게 행동합니까?
Breno Baiardi

2
@BrenoBaiardi이 질문은 그림 크기에 관한 것입니다. 도형 전체가 1 : 1 인 경우에도 도형 위에있는 축의 종횡비가 여전히 같지 않을 수 있으며, 축 상자가 1 : 1 인 경우에도 x 및 y 방향으로 데이터의 배율이 다르게 조정될 수 있습니다. 따라서 해당 명령이 동일한 종횡비를 보장하지는 않습니다.
Jouni K. Seppänen

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

1
나는 OS X에서 ipython 3.7, matplotlib 3.0.3에서 이것을 사용하고 있습니다. 그림 크기를 조정할 수는 있지만 창 크기는 조정되지 않습니다 (그림 캔버스는 조정되지만 캔버스를 수용하도록 창은 커지거나 줄어들지 않습니다). forward = True 키워드 인수가이 플랫폼에 의도 한 영향을 미치지 않는 것 같습니다.
K. Nielson

이것은 구글 공동 작업에서 나를 위해 작동
carlosaar22

355

중단 노트 :
당으로 공식하기 matplotlib 가이드는 ,의 사용 pylab모듈은 더 이상 권장되지 않습니다. 이 다른 답변에서matplotlib.pyplot 설명한대로 모듈을 대신 사용하십시오 .

다음은 작동하는 것 같습니다.

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

이것은 그림의 너비를 5 인치로 만들고 높이를 10 인치로 만듭니다.

그런 다음 Figure 클래스는이를 인수 중 하나의 기본값으로 사용합니다.


3
이것은 iPython 노트북 상단에서도 훌륭하게 작동합니다. (iven --pylab = inline) rcParams를 이미 최상위 레벨로 가져 왔습니다.
nealmcb

4
pyplot 및 Qt 백엔드에 대한 OO 인터페이스가있는 Windows 시스템에서는 작동하지 않았습니다. fig.set_size_inches(18.5, 10.5, forward=True)일했다.
베넷 브라운

2
이 답변은 현재 메타
Mischa

파이썬 버전 : 3.6.4, matplotlib : 2.2.3 목록이나 튜플을 전달해야한다고 생각합니다. rcParams [ 'figure.figsize'] = (5, 10)
Steve Gon

2
셀을 처음 실행할 때 왜 이것이 작동하지 않는지 아는 사람이 있습니까?
g07kore

314

plt.rcParams 사용

그림 환경을 사용하지 않고 크기를 변경하려는 경우에도이 해결 방법이 있습니다. 따라서 plt.plot()예를 들어 사용 하는 경우 너비와 높이로 튜플을 설정할 수 있습니다.

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

인라인을 플로팅 할 때 매우 유용합니다 (예 : IPython Notebook). @asamaier가 주목 한 것처럼이 명령문을 동일한 imports 문의 셀에 넣지 않는 것이 좋습니다.

cm로 변환

figsize당신은 2.54으로 그들을 분할해야 센티미터에서 설정하려는 경우에 좀 그래서 튜플 인치를 받아들이는 이 질문을 .


4
우수한! 한 번 설정하고 여러 번 플로팅 할 때도 유용합니다.
automorphic

어떤 이유로 Jupyter 노트북에서 더 이상 작동하지 않는 것 같습니다 (그러나 이전에는 사용되지 않음).
Ray

@Ray Jupyter 노트북의 버전과 작동 방식을 알려줄 수 있습니까?
GM

@GM은 지난 번 테스트했을 때 Anaconda의 Jupyter 버전 4.3.0 및 Python 3.6.2, Windows 10 및 Chrome 63.0.3239.84였습니다.
Ray

8
작동하려면 plt.rcParams["figure.figsize"] = (20,3)추가 셀 을 호출해야합니다 . import 문과 동일한 셀에서 호출하면 무시됩니다.
asmaier

269

다음과 같이 간단한 코드를 사용해보십시오.

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

플롯하기 전에 그림 크기를 설정해야합니다.


14
이 대답은 atplotlib.pyplot.figure다른 사람들이 명확하게 말하지 않는 m이라는 것을 알려줍니다 . 내가 좋아하는 일을 시도 계속 matplotlib.figure하고matplotlib.figure.Figure
린든 화이트에게

"_tkinter.TclError : 이미지 버퍼를위한 충분한 여유 메모리가 없습니다"
Cerin

5
plt.figure(figsize=(1,1))crux 움직임입니다. 감사합니다.
ximiki

jupyter 노트북에서 이것은 나를 위해 일했습니다 : plt.figure (figsize = (20,10))
Abhishek Poojary

jupyter 노트북을 사용하는 경우 다른 plt 명령 전에 plt.figure (figsize = (15, 10))를 사용하고 있는지 확인하십시오.
Yuhang Lin

90

Pandas 에서 그림 크기를 변경하는 방법을 찾고 있다면 다음과 같이하십시오.

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

df팬더 데이터 프레임은 어디에 있습니까 ? 또는 기존 도형을 사용하려면

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.]

두 가지 메모 :

  1. 모듈 설명과 실제 출력이 다릅니다.

  2. 이 답변을 사용하면 세 이미지를 하나의 이미지 파일로 쉽게 결합하여 크기의 차이를 볼 수 있습니다.


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_figwidthset_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

그림의 크기를 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.pyplot.get_current_fig_manager().resize(width_px, height_px)

7

psihodelia의 답변을 일반화하고 단순화합니다. 그림의 현재 크기를 요인으로 변경하려면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])

-3

를 사용하여 그림 크기를 직접 변경하십시오.

plt.set_figsize(figure=(10, 10))

4
pyplot라는 이름의 메소드가 없습니다 set_figsize.
오후
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.