Третій раз чарівність. Я здогадуюсь, що це помилка, і відповідь Женя дозволяє виправити це в останній версії. У мене версія 0.99.1.1 і я створив таке рішення:
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')
Це 'force.png':

Нижче наведені мої невдалі, але сподіваюсь, інформаційні спроби.
Другий відповідь:
Моя "оригінальна відповідь" нижче є надмірною, оскільки це робить щось подібне до axes.set_aspect(). Я думаю, ти хочеш використовувати axes.set_aspect('auto'). Я не розумію, чому це так, але він створює для мене графік квадратного зображення, наприклад, цей сценарій:
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')
Створює графік зображення з "рівним" співвідношенням сторін:
і один із "автоматичним" співвідношенням сторін:

Код, наданий нижче у "оригінальній відповіді", дає вихідну точку для явно контрольованого співвідношення сторін, але, здається, він ігнорується, коли викликається показ шоу.
Оригінальний відповідь:
Ось приклад програми, яка буде коригувати параметри субплоти, щоб отримати бажане співвідношення сторін:
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')
Виходить така цифра:

Я можу собі уявити, що якщо у вас є кілька підпрограмів в межах рисунка, ви хочете включити кількість y і x підпрограми як параметри ключових слів (за замовчуванням до 1 кожного) до наданого розпорядку. Потім , використовуючи ці цифри і hspaceі wspaceключові слова, ви можете зробити все подзаговор мати правильне співвідношення сторін.
ax.axis('equal')випадково? Як усі казали, те, що ви робили, має працювати, але цеax.axisможе бути інший шлях, щоб спробувати вирішити.