2009-08-13 3 views
27

Gibt es eine Möglichkeit, die Größe einer Figur automatisch so anzupassen, dass die enthaltenen Diagramme in ein Matplotlib/PyLab-Bild passen?Größenänderung einer Figur automatisch in Matplotlib

Ich erstelle Heatmap (Sub) Plots, die sich im Seitenverhältnis nach den verwendeten Daten unterscheiden.

Ich weiß, dass ich das Seitenverhältnis berechnen und manuell einstellen konnte, aber es gibt einen einfacheren Weg?

Antwort

34

Verwenden bbox_inches = 'tight'

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 

X = 10*np.random.rand(5,3) 

fig = plt.figure(figsize=(15,5),facecolor='w') 
ax = fig.add_subplot(111) 
ax.imshow(X, cmap=cm.jet) 

plt.savefig("image.png",bbox_inches='tight',dpi=100) 

... funktioniert nur, wenn obwohl Speichern von Bildern, zeigt sie nicht.

+1

Was bedeutet das fig.add_subplot (111)? Ich meine die Zahl innerhalb der eckigen Klammern ((111)) – dangerous

3

Meinst du das Ändern der Größe des Bildes oder der Fläche, die innerhalb einer Handlung sichtbar ist? Die Größe einer Figur kann mit Figure.set_figsize_inches eingestellt werden. Auch die SciPy Cookbook hat einen Eintrag zur Änderung der Bildgröße, die einen Abschnitt über mehrere Bilder pro Figur enthält.

Werfen Sie auch einen Blick auf diese question.

+0

Ich meine die Dimensionen des Objekts Abbildung. d. h. Beschneiden der Figur so, dass sie zu den enthaltenen Plots passt. Man müsste wahrscheinlich zuerst entweder eine Breite oder eine Höhe angeben und die andere berechnen lassen. – pufferfish

+0

Ich denke, der korrekte Befehl ist '' set_size_inches'' ohne die '' fig'' – innisfree

12

nur Aspekt verwenden = ‚auto‘, wenn Sie anrufen imshow

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 

X = 10*np.random.rand(5,3) 
plt.imshow(X, aspect='auto') 

es funktioniert, auch wenn es nur für die Ansicht und nicht die Spar

2

Ein anderer Weg, dies zu tun, die matplotlib tight_layout Funktion

verwendet
import matplotlib.pyplot as plt 
fig,(ax) = plt.subplots(figsize=(8,4), ncols=1) 
data = [0,1,2,3,4] 
ax.plot(data) 
fig.tight_layout() 
fig.show()