Come si modifica la dimensione della figura disegnata con matplotlib?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
per evitare la confusione una volta per tutte.
Come si modifica la dimensione della figura disegnata con matplotlib?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
per evitare la confusione una volta per tutte.
Risposte:
la figura indica la firma della chiamata:
from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
figure(figsize=(1,1))
creerebbe un'immagine pollice per pollice, che sarebbe 80 per 80 pixel a meno che non si fornisca anche un argomento dpi diverso.
show()
per creare una finestra pop-up, devi chiamare figure(num=1,...)
prima di tracciare qualsiasi cosa: pyplot / pylab crea una figura non appena disegni qualcosa e appare la dimensione del popup da risolvere a questo punto.
Se hai già creato la figura, puoi farlo rapidamente:
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)
Per propagare la modifica delle dimensioni in una finestra gui esistente aggiungere forward=True
fig.set_size_inches(18.5, 10.5, forward=True)
imshow
, ora sto usando questo codice subito dopo aver eliminato lo spazio attorno all'area della stampa con plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
.
fig.set_dpi(100)
.
Nota di deprecazione:
secondo la guida ufficiale di Matplotlib , l'uso delpylab
modulo non è più raccomandato. Si consiglia di utilizzarematplotlib.pyplot
invece il modulo, come descritto da questa altra risposta .
Il seguente sembra funzionare:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 10
Ciò rende la larghezza della figura di 5 pollici e la sua altezza di 10 pollici .
La classe Figure utilizza quindi questo come valore predefinito per uno dei suoi argomenti.
fig.set_size_inches(18.5, 10.5, forward=True)
lavorato.
C'è anche questa soluzione alternativa nel caso in cui si desideri modificare le dimensioni senza utilizzare l'ambiente figure. Quindi, nel caso tu stia usando plt.plot()
ad esempio, puoi impostare una tupla con larghezza e altezza.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
Questo è molto utile quando si traccia in linea (ad es. Con IPython Notebook). Come notato da @asamaier è preferibile non inserire questa affermazione nella stessa cella delle dichiarazioni di importazione.
La figsize
tupla accetta i pollici, quindi se vuoi impostarli in centimetri devi dividerli per 2,54 dai un'occhiata a questa domanda .
plt.rcParams["figure.figsize"] = (20,3)
una cella in più. Quando lo chiamo nella stessa cella dell'istruzione import, viene ignorato.
Prova un codice semplice come segue:
from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()
È necessario impostare le dimensioni della figura prima di stampare.
atplotlib.pyplot.figure
, che gli altri non dicono altrettanto chiaramente. Continuo a provare cose del genere matplotlib.figure
ematplotlib.figure.Figure
plt.figure(figsize=(1,1))
è la mossa cruciale. Grazie.
Nel caso in cui tu stia cercando un modo per cambiare la dimensione della figura in Panda , potresti fare ad esempio:
df['some_column'].plot(figsize=(10, 5))
dove si df
trova un frame di dati Pandas. Oppure, per utilizzare figure o assi esistenti
fig, ax = plt.subplots(figsize=(10,5))
df['some_column'].plot(ax=ax)
Se si desidera modificare le impostazioni predefinite, è possibile effettuare le seguenti operazioni:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
Il primo link in Google per 'matplotlib figure size'
è AdjustingImageSize ( cache di Google della pagina ).
Ecco uno script di test dalla pagina sopra. Crea test[1-3].png
file di dimensioni diverse della stessa immagine:
#!/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.
Produzione:
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.]
Due note:
I commenti del modulo e l'output effettivo differiscono.
Questa risposta consente di combinare facilmente tutte e tre le immagini in un file di immagine per vedere la differenza nelle dimensioni.
fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
Puoi semplicemente usare (da matplotlib.figure.Figure ):
fig.set_size_inches(width,height)
A partire da Matplotlib 2.0.0, le modifiche all'area di disegno saranno immediatamente visibili, come impostazione predefinita per la forward
parola chiave .True
Se vuoi solo cambiare la larghezza o l' altezza invece di entrambi, puoi usare
fig.set_figwidth(val)
o fig.set_figheight(val)
Questi aggiorneranno immediatamente anche la tua tela, ma solo in Matplotlib 2.2.0 e versioni successive.
Devi specificare forward=True
esplicitamente per aggiornare in tempo reale la tua tela in versioni precedenti a quanto specificato sopra. Si noti che le funzioni set_figwidth
e set_figheight
non supportano il forward
parametro nelle versioni precedenti a Matplotlib 1.5.0.
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()
Puoi anche usare:
fig, ax = plt.subplots(figsize=(20, 10))
Questo funziona bene per me:
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
Questo potrebbe anche aiutare: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
Per aumentare la dimensione della tua figura N volte devi inserirla subito prima di pl.show ():
N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )
Funziona bene anche con il notebook ipython.
Poiché Matplotlib non è in grado di utilizzare il sistema metrico in modo nativo, se si desidera specificare la dimensione della figura in un'unità di lunghezza ragionevole come centimetri, è possibile effettuare le seguenti operazioni (codice da 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)
Quindi puoi usare:
plt.figure(figsize=cm2inch(21, 29.7))
Generalizzare e semplificare la risposta di Psihodelia. Se si desidera modificare la dimensione corrente della figura di un fattoresizefactor
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)
Dopo aver modificato le dimensioni correnti, è possibile che sia necessario ottimizzare il layout della sottotrama . È possibile farlo nella GUI della finestra della figura o tramite il comando subplots_adjust
Per esempio,
plt.subplots_adjust(left=0.16, bottom=0.19, top=0.82)
Un'altra opzione, per usare la funzione rc () in matplotlib (l'unità è pollici)
import matplotlib
matplotlib.rc('figure', figsize=[10,5])
È possibile modificare direttamente la dimensione della figura utilizzando
plt.set_figsize(figure=(10, 10))
pyplot
non ha alcun metodo chiamato set_figsize
.
plt.figure(figsize=(20,10))