web-dev-qa-db-de.com

Wie ändert man die Größe der mit matplotlib gezeichneten Figuren?

Wie ändert man die Größe der mit matplotlib gezeichneten Figur?

1602
tatwright

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.

908

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)
648
Pete

Verfallserklärung:
Gemäß offizieller Matplotlib-Leitfaden wird die Verwendung des Moduls pylab nicht mehr empfohlen. Verwenden Sie stattdessen das matplotlib.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.

311
tatwright

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.

226
iPAS

USING plt.rcParams

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.

Umrechnung in cm

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 .

221
G M

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:

  1. Die Modulkommentare und die tatsächliche Ausgabe unterscheiden sich.

  2. Diese Antwort ermöglicht das einfache Kombinieren aller drei Bilder in einer Bilddatei, um den Größenunterschied festzustellen.

69
jfs

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))
57
Kris

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 forwardstandardmäß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.

Für ältere Versionen

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.

37
River

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()
27
Renaud

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.

15
psihodelia
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))
12
amalik2205

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

9
Blairg23

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))
8

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)
7
wilywampa

Eine andere Möglichkeit, die Funktion rc () in matplotlib zu verwenden (die Einheit ist Zoll)

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