Wie ändert man die Größe der mit matplotlib gezeichneten Figur?
Abbildung teilt Ihnen die Signatur des Anrufs mit:
from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
figure(figsize=(1,1))
erstellt ein Bild in Zollabständen, das 80 x 80 Pixel groß ist, sofern Sie nicht auch ein anderes dpi-Argument angeben.
Wenn Sie die Figur bereits erstellt haben, können Sie dies schnell tun:
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)
Fügen Sie forward=True
hinzu, um die Größenänderung in ein vorhandenes GUI-Fenster zu übertragen.
fig.set_size_inches(18.5, 10.5, forward=True)
Verfallserklärung:
Gemäß offizieller Matplotlib-Leitfaden wird die Verwendung des Modulspylab
nicht mehr empfohlen. Verwenden Sie stattdessen dasmatplotlib.pyplot
-Modul, wie durch diese andere Antwort beschrieben.
Folgendes scheint zu funktionieren:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 10
Dies macht die Breite der Figur 5 Zoll und ihre Höhe 10 Zoll zoll.
Die Figure-Klasse verwendet dies dann als Standardwert für eines ihrer Argumente.
Bitte versuchen Sie einen einfachen Code wie folgt:
from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()
Sie müssen die Abbildungsgröße einstellen, bevor Sie zeichnen.
Es gibt auch diese Problemumgehung, falls Sie die Größe ändern möchten, ohne die Figurenumgebung zu verwenden. Wenn Sie beispielsweise plt.plot()
verwenden, können Sie ein Tupel mit Breite und Höhe festlegen.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
Dies ist sehr nützlich, wenn Sie inline zeichnen (z. B. mit IPython Notebook). Wie @asamaier bemerkte, ist es vorzuziehen, diese Anweisung nicht in dieselbe Zelle der Importanweisungen zu setzen.
Das Tupel figsize
akzeptiert Zoll. Wenn Sie es also in Zentimetern einstellen möchten, müssen Sie sie durch 2,54 teilen. Schauen Sie nach diese Frage .
Der erste Link in Google für 'matplotlib figure size'
ist AdjustingImageSize ( Google-Cache der Seite ).
Hier ist ein Testskript von der obigen Seite. Es werden test[1-3].png
Dateien unterschiedlicher Größe desselben Bildes erstellt:
#!/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.
Ausgabe:
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.]
Zwei Notizen:
Die Modulkommentare und die tatsächliche Ausgabe unterscheiden sich.
Diese Antwort ermöglicht das einfache Kombinieren aller drei Bilder in einer Bilddatei, um den Größenunterschied festzustellen.
Falls Sie nach einer Möglichkeit suchen, die Größe der Figur in Pandas zu ändern, können Sie beispielsweise Folgendes tun:
df['some_column'].plot(figsize=(10, 5))
dabei ist df
ein Pandas Datenrahmen. Wenn Sie die Standardeinstellungen ändern möchten, können Sie Folgendes tun:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
Sie können einfach (von matplotlib.figure.Figure ) verwenden:
fig.set_size_inches(width,height)
Ab Matplotlib 2.0.0 sind Änderungen an Ihrer Zeichenfläche sofort sichtbar, da das Schlüsselwort forward
standardmäßig True
.
Wenn Sie nur ändern Sie die Breite oder Höhe anstelle von beiden, können Sie verwenden
fig.set_figwidth(val)
oder fig.set_figheight(val)
Diese aktualisieren auch sofort Ihre Zeichenfläche, jedoch nur in Matplotlib 2.2.0 und neuer.
Sie müssen forward=True
explizit angeben, um Ihre Zeichenfläche in Versionen zu aktualisieren, die älter sind als oben angegeben. Beachten Sie, dass die Funktionen set_figwidth
und set_figheight
den Parameter forward
in Versionen älter als Matplotlib 1.5.0 nicht unterstützen.
Kommentieren Sie die Zeile fig = ...
aus
%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()
Um Ihre Figur N-mal zu vergrößern, müssen Sie dies kurz vor Ihrer pl.show () einfügen:
N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )
Es funktioniert auch gut mit ipython notebook.
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()
Sie können auch verwenden:
fig, ax = plt.subplots(figsize=(20, 10))
Das funktioniert gut für mich:
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
Dies könnte auch helfen: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
Da Matplotlib nicht in der Lage ist das metrische System nativ zu verwenden, können Sie Folgendes tun, wenn Sie die Größe Ihrer Figur in einer angemessenen Längeneinheit wie z. B. Zentimetern angeben möchten (Code von - 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)
Dann können Sie verwenden:
plt.figure(figsize=cm2inch(21, 29.7))
Dies ändert die Größe der Figur sofort, selbst nachdem die Figur gezeichnet wurde (zumindest unter Verwendung von Qt4Agg/TkAgg - aber nicht MacOSX - mit matplotlib 1.4.0):
matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)
Eine andere Möglichkeit, die Funktion rc () in matplotlib zu verwenden (die Einheit ist Zoll)
import matplotlib
matplotlib.rc('figure', figsize=[10,5])