Imshow: протяженность и аспект


Я пишу программную систему, которая визуализирует срезы и проекции через 3D-набор данных. Я использую matplotlib и в частности imshow чтобы визуализировать буферы изображений, я возвращаюсь из своего кода анализа.

поскольку я хотел бы аннотировать изображения с помощью осей графика, я использую ключевое слово extent, которое imshow обеспечивает отображение координат пикселей буфера изображения в систему координат пространства данных.

но matplotlib не знает о единицах измерения. Скажем (принимая искусственный пример), что я хочу построить изображение с размерами 1000 m X 1 km. В этом случае экстент будет что-то вроде [0, 1000, 0, 1]. Несмотря на то, что массив изображений является квадратным, поскольку соотношение сторон, подразумеваемое ключевым словом extent, равно 1000, результирующие оси графика также имеют соотношение сторон 1000.

можно ли заставить соотношение сторон графика, сохраняя при этом автоматически сгенерированные основные деления и метки, которые я получаю с помощью ключевого слова extent?

1 72

1 ответ:

Вы можете сделать это, установив аспект изображения вручную (или позволяя ему автоматически масштабировать, чтобы заполнить масштабов рисунка).

по умолчанию imshow устанавливает аспект графика в 1, так как это часто то, что люди хотят для данных изображения.

в вашем случае, вы можете сделать что-то вроде:

import matplotlib.pyplot as plt
import numpy as np

grid = np.random.random((10,10))

fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(6,10))

ax1.imshow(grid, extent=[0,100,0,1])
ax1.set_title('Default')

ax2.imshow(grid, extent=[0,100,0,1], aspect='auto')
ax2.set_title('Auto-scaled Aspect')

ax3.imshow(grid, extent=[0,100,0,1], aspect=100)
ax3.set_title('Manually Set Aspect')

plt.tight_layout()
plt.show()

enter image description here