Wie ändern Sie die Größe der mit matplotlib gezeichneten Figur?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
um die Verwirrung ein für alle Mal zu vermeiden.
Wie ändern Sie die Größe der mit matplotlib gezeichneten Figur?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
um die Verwirrung ein für alle Mal zu vermeiden.
Antworten:
Abbildung zeigt Ihnen die Anrufsignatur:
from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
figure(figsize=(1,1))
würde ein Zoll-für-Zoll-Bild erstellen, das 80 x 80 Pixel groß wäre, sofern Sie nicht auch ein anderes dpi-Argument angeben.
show()
ein Popup-Fenster erstellen, müssen Sie aufrufen, figure(num=1,...)
bevor Sie etwas zeichnen. Pyplot / Pylab erstellt eine Figur, sobald Sie etwas zeichnen, und die Größe des Popups wird angezeigt an dieser Stelle fixiert werden.
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)
Um die Größenänderung auf ein vorhandenes GUI-Fenster zu übertragen, fügen Sie hinzu forward=True
fig.set_size_inches(18.5, 10.5, forward=True)
imshow
behoben. Jetzt verwende ich diesen Code, nachdem ich den Platz um den Plotbereich mit beseitigt habe plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
.
fig.set_dpi(100)
.
Verfallshinweis: Gemäß
dem offiziellen Matplotlib-Handbuch wird die Verwendung despylab
Moduls nicht mehr empfohlen. Bitte verwenden Sie stattdessen dasmatplotlib.pyplot
Modul, wie in dieser anderen 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 .
Die Figure-Klasse verwendet dies dann als Standardwert für eines ihrer Argumente.
fig.set_size_inches(18.5, 10.5, forward=True)
hat funktioniert.
Es gibt auch diese Problemumgehung für den Fall, dass Sie die Größe ändern möchten, ohne die Figurenumgebung zu verwenden. Wenn Sie plt.plot()
beispielsweise 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 bemerkt hat, ist es vorzuziehen, diese Anweisung nicht in dieselbe Zelle der Importanweisungen zu setzen.
Das figsize
Tupel akzeptiert Zoll. Wenn Sie es also in Zentimetern einstellen möchten, müssen Sie es durch 2,54 teilen. Schauen Sie sich diese Frage an .
plt.rcParams["figure.figsize"] = (20,3)
eine zusätzliche Zelle anrufen . Wenn ich es in derselben Zelle wie die import-Anweisung aufrufe, wird es ignoriert.
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 Figurengröße festlegen, bevor Sie zeichnen.
atplotlib.pyplot.figure
, was die anderen nicht so klar sagen. Ich versuche immer wieder Dinge wie matplotlib.figure
undmatplotlib.figure.Figure
plt.figure(figsize=(1,1))
ist der entscheidende Schritt. Vielen Dank.
Wenn Sie nach einer Möglichkeit suchen, die Figurengröße in Pandas zu ändern , können Sie z.
df['some_column'].plot(figsize=(10, 5))
Wo df
ist ein Pandas-Datenrahmen? Oder um vorhandene Figuren oder Achsen zu verwenden
fig, ax = plt.subplots(figsize=(10,5))
df['some_column'].plot(ax=ax)
Wenn Sie die Standardeinstellungen ändern möchten, können Sie Folgendes tun:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
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 Anmerkungen:
Die Modulkommentare und die tatsächliche Ausgabe unterscheiden sich.
Diese Antwort ermöglicht es einfach, alle drei Bilder in einer Bilddatei zu kombinieren, um den Größenunterschied zu erkennen.
fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
Sie können einfach verwenden (aus matplotlib.figure.Figure ):
fig.set_size_inches(width,height)
Ab Matplotlib 2.0.0 werden Änderungen an Ihrer Zeichenfläche sofort sichtbar, da das forward
Schlüsselwort standardmäßig verwendet wirdTrue
.
Wenn Sie nur die Breite oder Höhe anstelle von beiden ändern möchten , 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 höher.
Sie müssen forward=True
explizit angeben, um Ihre Zeichenfläche in älteren Versionen als den oben angegebenen live zu aktualisieren. Beachten Sie, dass die Funktionen set_figwidth
und set_figheight
den forward
Parameter in älteren Versionen als Matplotlib 1.5.0 nicht unterstützen .
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))
Versuchen Sie, die fig = ...
Zeile zu kommentieren
%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()
Das funktioniert gut für mich:
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
Dies kann auch hilfreich sein: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
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.
Da Matplotlib nicht in der Lage ist nativ das metrische System zu verwenden, wenn Sie die Größe Ihrer Figur in einer angemessenen Längeneinheit wie Zentimeter angeben möchten, können Sie den folgenden (Code aus tun 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))
Verallgemeinerung und Vereinfachung der Antwort von Psihodelia. Wenn Sie die aktuelle Größe der Figur um einen Faktor ändern möchtensizefactor
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)
Nach dem Ändern der aktuellen Größe kann es vorkommen, dass Sie das Layout des Unterplots optimieren müssen . Sie können dies in der GUI des Figurenfensters oder mit dem Befehl subplots_adjust tun
Zum Beispiel,
plt.subplots_adjust(left=0.16, bottom=0.19, top=0.82)
Eine weitere Option ist die Verwendung der Funktion rc () in matplotlib (die Einheit ist Zoll).
import matplotlib
matplotlib.rc('figure', figsize=[10,5])
Sie ändern die Figurengröße direkt mit
plt.set_figsize(figure=(10, 10))
pyplot
hat keine Methode benannt set_figsize
.
plt.figure(figsize=(20,10))