En tercer lugar el encanto. Supongo que esto es un error y Zhenya's answer sugiere que esté arreglado en la última versión. Tengo la versión 0.99.1.1 y he creado la siguiente solución:
import matplotlib.pyplot as plt
import numpy as np
def forceAspect(ax,aspect=1):
im = ax.get_images()
extent = im[0].get_extent()
ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_xlabel('xlabel')
ax.set_aspect(2)
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
forceAspect(ax,aspect=1)
fig.savefig('force.png')
Ésta es 'force.png':
continuación son mis intentos sin éxito, sin embargo, es de esperar informativos.
Segunda respuesta:
Mi 'respuesta original' a continuación es una exageración, ya que hace algo similar a axes.set_aspect()
. Creo que quieres usar axes.set_aspect('auto')
. No entiendo por qué este es el caso, pero produce una parcela cuadrado por mí, por ejemplo, esta secuencia de comandos:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_aspect('equal')
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
produce una trama de imagen con 'igual' relación de aspecto: y uno con 'auto' relación de aspecto:
El código proporcionado a continuación en la 'respuesta original' proporciona un punto de partida para una relación de aspecto explícitamente controlada, pero parece ignorarse una vez que se llama a imshow.
respuesta original:
Aquí está un ejemplo de una rutina que ajustar los parámetros de subparcelas de manera que se obtiene la relación de aspecto deseada:
import matplotlib.pyplot as plt
def adjustFigAspect(fig,aspect=1):
'''
Adjust the subplot parameters so that the figure has the correct
aspect ratio.
'''
xsize,ysize = fig.get_size_inches()
minsize = min(xsize,ysize)
xlim = .4*minsize/xsize
ylim = .4*minsize/ysize
if aspect < 1:
xlim *= aspect
else:
ylim /= aspect
fig.subplots_adjust(left=.5-xlim,
right=.5+xlim,
bottom=.5-ylim,
top=.5+ylim)
fig = plt.figure()
adjustFigAspect(fig,aspect=.5)
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
fig.savefig('axAspect.png')
Esto produce una figura de este modo:
Me imagino que si tienes múltiples subtramas dentro de la figura, tienes Me gustaría incluir el número de subparcelas yy x como parámetros de palabras clave (valor predeterminado en 1 cada uno) a la rutina provista. Luego, usando esos números y las palabras clave hspace
y wspace
, puede hacer que todas las subtramas tengan la proporción de aspecto correcta.
¿Has probado 'ax.axis ('equal')', por casualidad? Como todos dijeron, lo que hiciste debería funcionar, pero 'ax.axis' podría ser otra ruta para intentar una solución. –
http://matplotlib.org/examples/pylab_examples/equal_aspect_ratio.html –