Imshow: протяженность и аспект
Я пишу программную систему, которая визуализирует срезы и проекции через 3D-набор данных. Я использую matplotlib
и в частности imshow
чтобы визуализировать буферы изображений, я возвращаюсь из своего кода анализа.
поскольку я хотел бы аннотировать изображения с помощью осей графика, я использую ключевое слово extent, которое imshow
обеспечивает отображение координат пикселей буфера изображения в систему координат пространства данных.
но matplotlib
не знает о единицах измерения. Скажем (принимая искусственный пример), что я хочу построить изображение с размерами 1000 m X 1 km
. В этом случае экстент будет что-то вроде [0, 1000, 0, 1]
. Несмотря на то, что массив изображений является квадратным, поскольку соотношение сторон, подразумеваемое ключевым словом extent, равно 1000, результирующие оси графика также имеют соотношение сторон 1000.
можно ли заставить соотношение сторон графика, сохраняя при этом автоматически сгенерированные основные деления и метки, которые я получаю с помощью ключевого слова extent?
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()