Аспект Imshow не работает должным образом

Я выполняю численное моделирование, и у меня возникают проблемы с графиками... Моя область моделирования 6x35µm с разрешением 640x1024px. Когда я хочу построить данные моделирования, используя imshow, и установить соотношение сторон: aspect=6/35, тогда высота графика правильная, но слишком длинная? Что я делаю неправильно?

На картинке:

top: маска моделирования, все графики должны иметь одинаковое соотношение сторон.

middle: соотношение сторон устанавливается вручную в соответствии с соотношением сторон маски имитации (6/35)

bottom: аспект установлен на 1

введите здесь описание изображения

Вот мой код

fig = pl.figure(num=None, figsize=(10, 10))
ax = fig.add_subplot(1,1,1)
img = ax.imshow(data, aspect=6./35)

person FrankTheTank    schedule 10.04.2014    source источник


Ответы (3)


Вам также необходимо учитывать разницу в разрешении по обеим осям. Для вашей оси Y у вас есть 640 точек данных для 6 микрометров, а для оси x 1024 точки данных для 35 микрометров. Matplotlib предполагает, что оба они равны.

data = np.random.rand(640,1024)

fig, axs = plt.subplots(2,1, figsize=(10, 4))

aspect = 6 / 35

axs[0].set_title('aspect: %1.2f' % aspect)
axs[0].imshow(data, aspect=aspect, interpolation='none')

aspect = (6/35.) * (1024 / 640)

axs[1].set_title('aspect: %1.2f' % aspect)
axs[1].imshow(data, aspect=aspect, interpolation='none')

введите здесь описание изображения

person Rutger Kassies    schedule 10.04.2014

Вам нужно сделать следующее:

img = ax.imshow(data, aspect = 6/35.)

или, другими словами, сделать число с плавающей запятой знаменателя. 6/35 равно нулю. 6/35. нет.

надеюсь, это поможет

person The Dude    schedule 10.04.2014
comment
Извините, проблема не в этом... В моем коде должна быть точка, это правильно. Я отредактировал его. - person FrankTheTank; 10.04.2014

Я нашел ответ где-то еще на форуме... Как установить соотношение сторон в matplotlib?

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)
person FrankTheTank    schedule 10.04.2014