2009-08-13 17 views
27

Czy istnieje sposób automatycznej zmiany rozmiaru figury tak, aby prawidłowo pasował zawarte w niej wątki w obrazie matplotlib/pylab?Zmiana rozmiaru figury automatycznie w matplotlib

Tworzę wykresy mapy ciepła (podrzędnej), które różnią się współczynnikiem kształtu zgodnie z użytymi danymi.

Rozumiem, że mogę obliczyć współczynnik proporcji i ręcznie ustawić go, ale na pewno jest łatwiejszy sposób?

Odpowiedz

34

Zastosowanie bbox_inches = 'mocno'

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) 

... działa tylko podczas zapisywania obrazów choć ich nie widać.

+1

Co oznacza ten rysunek fig.add_subplot (111)? Mam na myśli liczbę w nawiasach kwadratowych ((111)) – dangerous

3

Masz na myśli zmianę rozmiaru obrazu lub obszaru widocznego w obrębie działki?

Wielkość rysunku można ustawić za pomocą Figure.set_figsize_inches. Również SciPy Cookbook ma wpis dotyczący zmiany rozmiaru obrazu, który zawiera sekcję o wielu obrazach na rysunek.

Zapoznaj się również z tym question.

+0

Mam na myśli wymiary obiektu rysunku. tzn. Przytnij rysunek, aby pasował do zawartego wykresu (ów). Prawdopodobnie najpierw trzeba będzie podać szerokość lub wysokość, a inne obliczać. – pufferfish

+0

Myślę, że poprawne polecenie to '' .set_size_inches'' bez '' fig'' – innisfree

12

wystarczy użyć aspekt = „auto” podczas rozmowy 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') 

to działa, nawet jeśli jest to tylko do pokazywania i nie oszczędzając

2

Innym sposobem osiągnięcia tego celu jest za pomocą matplotlib tight_layout funkcji

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