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