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

Matplotlib.pyplot, сохранить соотношение сторон графика

Предполагая, что мы имеем полигональные координаты как многоугольник = [(x1, y1), (x2, y2),...], следующий код отображает многоугольник:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.show()

По умолчанию он пытается настроить пропорции так, чтобы полигон (или любая другая диаграмма) помещался внутри окна и автоматически менял его так, чтобы он соответствовал даже после изменения размера. Это замечательно во многих случаях, за исключением случаев, когда вы пытаетесь оценить визуально, если изображение искажено. Как исправить соотношение сторон строго 1:1?

(Не уверен, что здесь "правый коэффициент" является правильным, поэтому в случае, если это не так, мне нужно, чтобы оси X и Y имели шкалу 1:1, так что (0, 1) на X и Y занимает одно и то же пространство экрана, и мне нужно сохранить его 1:1, независимо от того, как я изменяю размер окна.)

4b9b3361

Ответ 1

Помогает ли это использовать:

plt.axis('equal')

Ответ 2

Есть, я уверен, способ установить это непосредственно как часть команды вашего сюжета, но я не помню трюк. Чтобы сделать это после того, как вы можете использовать текущую ось и установить ее соотношение сторон с "set_aspect (" equal ")". В вашем примере:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.axes().set_aspect('equal', 'datalim')
plt.show()

Я использую это все время, и это из примеров на веб-сайте matplotlib.

Ответ 3

'scaled' с использованием plt

Лучше всего использовать:

 plt.axis('scaled')

Как сказал Саулло Кастро. Потому что с равным вы не можете изменить один предел оси, не меняя другого, поэтому, если вы хотите поместить все не квадратные фигуры, у вас будет много свободного места.

Равные

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

Чешуйчатый

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

'equal' unsing ax

В качестве альтернативы вы можете использовать класс осей .

fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')

Ответ 4

Лучше plt.axis('scaling'), он работает лучше, если вы хотите изменить оси с помощью xlim() и ylim().