Redimensionar uma figura automaticamente no matplotlib
-
13-09-2019 - |
Pergunta
Existe uma maneira para redimensionar automaticamente um número de parcelas devidamente apto contidas em uma imagem matplotlib / Pylab?
Estou criando HeatMap (sub) parcelas que diferem entre si em relação de aspecto de acordo com os dados utilizados.
Eu percebo que eu poderia calcular a relação de aspecto e manualmente configurá-lo, mas certamente há uma maneira mais fácil?
Solução
Use bbox_inches = 'apertado'
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)
... só funciona quando guardar imagens, porém, não mostrando a eles.
Outras dicas
apenas uso aspecto = 'auto' quando você chamar 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')
funciona mesmo que seja apenas para mostrar e não poupar
Outra maneira de fazer isso é usando o matplotlib tight_layout função
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()
Você quer dizer alterar o tamanho da imagem ou a área que é visível dentro de um enredo?
O tamanho de uma figura pode ser definido com Figure.set_figsize_inches . Também a SciPy Cookbook tem uma entrada em mudar o tamanho da imagem que contém uma seção sobre múltiplas imagens por figura.
você pode tentar usar eixo ( 'escalado')
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()
Também é possível usar ax.autoscale com machado objeto
ax.autoscale(enable=True)