Frage

Gibt es eine Möglichkeit, um automatisch eine Zahl die Größe richtig enthaltenen Grundstücke in einem matplotlib / pylab Bild passen?

Ich schaffe heatmap (sub) Plots, die verwendet gemäß den Daten im Bildseitenverhältnis unterscheidet.

Ich weiß, ich könnte das Seitenverhältnis berechnen und manuell einstellen, aber sicher gibt es einen einfacheren Weg?

War es hilfreich?

Lösung

Mit 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 die Bilder zwar speichern, sie nicht zeigen.

Andere Tipps

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 sparen, ist

Eine andere Möglichkeit, dies zu tun, wird mit dem matplotlib tight_layout Funktion

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

Wollen Sie die Größe des Bildes oder den Bereich zu ändern, die innerhalb von einem Grundstück visable ist?

Die Größe einer Zahl kann Figure.set_figsize_inches eingestellt werden. Auch die SciPy Kochbuch einen Eintrag zum Ändern der Bildgröße aufweist, die einen Abschnitt über mehrere Bilder enthält pro Figur.

Werfen Sie auch einen Blick auf diese Frage .

Sie können versuchen, Achse mit ( 'skaliert')

import matplotlib.pyplot as plt
import numpy

#some dummy images
img1 = numpy.array([[.1,.2],[.3,.4]]) 
img2 = numpy.array([[.1,.2],[.3,.4]])

fig,ax = plt.subplots()
ax.imshow(img1,extent=[0,1,0,1])
ax.imshow(img2,extent=[2,3,0,1])
ax.axis('scaled') #this line fits your images to screen 
plt.show()

Auch möglich verwenden ax.autoscale mit Axt Objekt

ax.autoscale(enable=True) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top