Подтвердить что ты не робот

Imshow: степень и аспект

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

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

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

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

4b9b3361

Ответ 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