Matplotlib ile çizilen figürlerin boyutunu nasıl değiştirirsiniz?


2035

Matplotlib ile çizilen figürün boyutunu nasıl değiştirirsiniz?


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

307
VEYAfig, ax = plt.subplots(figsize=(20, 10))
alexw

99
Şekil boyutunun piksel cinsinden olduğunu düşündüğümde (800,600) belirttim ve program çöktü! Ünitenin inç olduğunu lütfen unutmayın.
Raja

2
@alexw bu dokümantasyonda mı?
liang

48
fig = plt.gcf()-> fig.set_size_inches(11,8)karışıklığı önlemek için bir kez ve herkes için.
Ufos

Yanıtlar:


1099

şekil size çağrı imzasını söyler:

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

figure(figsize=(1,1)) farklı bir dpi argümanı vermedikçe 80x80 piksel olacak inçlik bir görüntü oluşturur.


95
Oluşturduğunuz şekli zaten oluşturduysanız, bunun 'şekil 1' olduğunu (pyplot kullanırken varsayılan olanı olduğunu) varsa, şekil kullanabilirsiniz (num = 1, figsize = (8, 6), ...) pyplot / pylab kullanıyorsanız ve show()bir pop-up penceresi oluşturmak için, bir şey çizmeden figure(num=1,...) önce aramanız gerekir - pyplot / pylab bir şey çizer çizmez bir rakam oluşturur ve pop-up'ın boyutu görünür bu noktada sabitlenecek.
drevicko

22
Varsayılan argümanları kaldırırsanız cevabınızın daha iyi olacağını düşünüyorum. Sinyal-gürültü oranını gereksiz yere azaltır.
frmsaul

3
DPI'ı 1 olarak ayarlarsanız, rakam boyutu inç birimi yerine piksel birimi haline gelir mi? Bu, web ve GUI arayüzlerinde matplotlib kullanıldığında daha yararlı olacaktır.
CMCDragonkai

1
figsize (1,1) ile görüntüde 1: 1 olarak bir oran olacak mı? çünkü tüm pasta grafiklerim oval ve onları yuvarlaklaştırmanın tek yolu plot.axis ("eşittir") kullanmaktı. aynı etkiye sahip olurlar mı yoksa farklı davranırlar mı?
Breno Baiardi

2
@BrenoBaiardi Bu soru figür boyutuyla ilgili. Şeklin üstündeki eksenler, bir bütün olarak şekil 1: 1 olsa bile eşit olmayan bir en-boy oranına sahip olabilir ve eksen kutusu 1: 1 olsa bile, veriler x ve y yönlerinde farklı ölçeklenebilir. Yani, hayır, bu komut eşit bir en boy oranını garanti etmez.
Jouni K. Seppänen

741

Oluşturduğunuz şekli zaten aldıysanız, bunu hızlı bir şekilde yapabilirsiniz:

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

Boyut değişikliğini mevcut bir gui penceresine yaymak için forward=True

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

3
Bana bir sorun çözüldü imshow, şimdi sadece çizim alanı çevresindeki alanı ortadan kaldırdıktan sonra bu kodu kullanıyorum plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0).
heltonbiker

7
Benzer şekilde, koşabilirsiniz fig.set_dpi(100).
Erik Shilts

1
Ben OS X ipython 3.7, matplotlib 3.0.3 altında kullanıyorum. Şekil boyutunu ayarlayabilirim, ancak pencere yeniden boyutlandırılmaz (şekil tuvali ayarlanır, ancak pencere tuvali yerleştirmek için büyümez veya küçülmez). Forward = True anahtar kelime bağımsız değişkeninin bu platformda amaçlanan etkisi yok gibi görünüyor.
K.Newson

Google colaboratory'de benim için bu çalışma
carlosaar22

355

Eskime not:
gereğince resmi Matplotlib rehber , kullanım pylabmodülü artık tavsiye edilir. Lütfen matplotlib.pyplotbunun yerine bu diğer cevapta açıklandığı gibi modülü kullanmayı düşünün .

Aşağıdaki gibi görünüyor:

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

Bu, şeklin genişliğini 5 inç ve yüksekliğini 10 inç yapar .

Figure sınıfı bunu bağımsız değişkenlerinden biri için varsayılan değer olarak kullanır.


3
Bu aynı zamanda (verilen --pylab = satır içi) zaten üst düzeyde içe aktarılan rcParams'a sahip olan bir iPython dizüstü bilgisayarın üst kısmında iyi çalışır.
nealmcb

4
Bu, pyplot ve Qt arka ucuna OO arabirimli Windows makinemde çalışmadı. fig.set_size_inches(18.5, 10.5, forward=True)çalıştı.
Bennett Brown

2
Bu cevap şu anda tartışılmıştır Meta
Mischa

Python sürümü için: 3.6.4, matplotlib: 2.2.3 Sanırım bir liste veya grup geçirmeniz gerekiyor, örneğin rcParams ['figure.figsize'] = (5, 10)
Steve Gon

2
Bunun ilk kez hücreyi çalıştırırken neden çalışmadığını bilen var mı?
g07kore

314

Plt.rcParams KULLANIMI

Şekil ortamını kullanmadan boyutu değiştirmek istemeniz durumunda da bu geçici çözüm vardır. plt.plot()Örneğin, kullanmanız durumunda , genişlik ve yükseklikte bir tuple ayarlayabilirsiniz.

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

Bu, satır içi çizim yaparken çok kullanışlıdır (örneğin IPython Notebook ile). @Asamaier'in fark ettiği gibi, bu ifadeyi ithalat ifadelerinin aynı hücresine koymamak tercih edilir.

Cm'ye dönüştürme

figsizeEğer 2,54 bunları bölmek zorunda santimetre cinsinden ayarlamak isterseniz bir göz böylece tanımlama grubu inç kabul bu soruya .


4
Mükemmel! Ayrıca bir kez ayarlamak ve birden çok kez çizmek için de yararlıdır.
automorphic

Bazı nedenlerden dolayı, bu artık Jupyter not defterinde çalışmıyor (ancak alışkın).
Ray

@ Ray Jupyter not defterinizin sürümünü ve benim için işe yarayan davranışı yazabilir misiniz
GM

@GM son test ettiğimde, Windows 10 ve Google Chrome 63.0.3239.84'te Anaconda'dan Jupyter 4.3.0 ve Python 3.6.2 idi.
Ray

8
Çalışması plt.rcParams["figure.figsize"] = (20,3)için fazladan bir hücreyi aramam gerekiyor . İçe aktarma ifadesiyle aynı hücrede çağırdığımda yoksayılır.
asmaier

269

Lütfen aşağıdaki gibi basit bir kod deneyin:

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

Çizmeden önce şekil boyutunu ayarlamanız gerekir.


14
Bu cevap bana atplotlib.pyplot.figurediğerlerinin açıkça söylemediği m olduğunu söylüyor. Gibi şeyler denemeye devam matplotlib.figurevematplotlib.figure.Figure
Lyndon Beyaz'a

"_tkinter.TclError: resim arabelleği için yeterli boş bellek yok"
Cerin

5
plt.figure(figsize=(1,1))en önemli hamle. Teşekkür ederim.
ximiki

Jupyter not defterinde bu benim için çalıştı: plt.figure (figsize = (20,10))
Abhishek Poojary

Jupyter dizüstü bilgisayar kullananlar için lütfen diğer plt komutlarından önce plt.figure (figsize = (15, 10)) kullandığınızdan emin olun.
Yuhang Lin

90

Pandalar'daki şekil boyutunu değiştirmenin bir yolunu arıyorsanız , şunları yapabilirsiniz:

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

dfPandalar veri çerçevesi nerede . Veya mevcut şekli veya eksenleri kullanmak için

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

Varsayılan ayarları değiştirmek isterseniz, aşağıdakileri yapabilirsiniz:

import matplotlib

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

73

Google'da ilk halkası 'matplotlib figure size'olan AdjustingImageSize ( sayfa Google önbellek ).

Yukarıdaki sayfadan bir test komut dosyası. test[1-3].pngAynı görüntünün farklı boyutlarında dosyalar oluşturur :

#!/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.

Çıktı:

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

İki not:

  1. Modül yorumları ve gerçek çıkış farklıdır.

  2. Bu yanıt , boyutlardaki farkı görmek için üç görüntüyü tek bir görüntü dosyasında kolayca birleştirmenizi sağlar.


7
Her zaman nasıl yapılacağını hatırlamaya çalıştığımda bu yazıya giriyorum. Yani, bu normalde aradığım kod:fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
y.selivonchyk

45

Şunu kullanabilirsiniz ( matplotlib.figure.Figure öğesinden ):

fig.set_size_inches(width,height)

Matplotlib 2.0.0'dan itibaren, tuvalinizdeki değişiklikler forwardanahtar kelime varsayılanıTrue olarak hemen görünür .

Her ikisi yerine genişliği veya yüksekliği değiştirmek isterseniz,

fig.set_figwidth(val) veya fig.set_figheight(val)

Bunlar da tuvalinizi hemen güncelleyecektir, ancak sadece Matplotlib 2.2.0 ve daha yeni sürümlerde.

Eski Sürümler için

forward=TrueTuvalinizi yukarıda belirtilenden daha eski sürümlerde canlı güncellemek için açıkça belirtmeniz gerekir . Not set_figwidthve set_figheightişlevleri desteklemez forwardMatplotlib 1.5.0 daha eski sürümlerinde parametre.


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

Ayrıca kullanabilirsiniz:

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

31

fig = ...Çizgiyi yorumlamayı deneyin

%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

Bu benim için iyi çalışıyor:

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

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


16

Rakamınızın boyutunu N kat arttırmak için bunu pl.show () öğesinden hemen önce eklemeniz gerekir:

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

Ayrıca ipython dizüstü bilgisayar ile iyi çalışır.


10

Matplotlib yana mümkün değildir Eğer uzunlukta bir makul ünitesinde rakamın büyüklüğünü belirtmek istiyorsanız bu tür santimetre olarak, doğal olarak metrik sistemi kullanmak için, aşağıdaki (kod yapabilirsiniz 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)

Sonra şunları kullanabilirsiniz:

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

8

Bu, şekil çizildikten sonra bile rakamı yeniden boyutlandırır (en azından Qt4Agg / TkAgg kullanarak - ancak MacOSX değil - matplotlib 1.4.0 ile):

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

7

Psihodelia'nın cevabını genelleme ve basitleştirme. Şeklin geçerli boyutunu bir faktörle değiştirmek istiyorsanızsizefactor

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) 

Geçerli boyutu değiştirdikten sonra, alt alan düzenine ince ayar yapmanız gerekebilir . Bunu şekil penceresi GUI'sinde veya komut aracılığıyla yapabilirsiniz. subplots_adjust

Örneğin,

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

5

Matplotlib'de rc () işlevini kullanmak için başka bir seçenek (birim inçtir)

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

-3

Şekil boyutunu doğrudan kullanarak

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

4
pyplotadında bir yöntem yok set_figsize.
Princy
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.