Ответ 1
Помогает ли это использовать:
plt.axis('equal')
Предполагая, что мы имеем полигональные координаты как многоугольник = [(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, независимо от того, как я изменяю размер окна.)
Помогает ли это использовать:
plt.axis('equal')
Есть, я уверен, способ установить это непосредственно как часть команды вашего сюжета, но я не помню трюк. Чтобы сделать это после того, как вы можете использовать текущую ось и установить ее соотношение сторон с "set_aspect (" equal ")". В вашем примере:
import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.axes().set_aspect('equal', 'datalim')
plt.show()
Я использую это все время, и это из примеров на веб-сайте matplotlib.
Лучше всего использовать:
plt.axis('scaled')
Как сказал Саулло Кастро. Потому что с равным вы не можете изменить один предел оси, не меняя другого, поэтому, если вы хотите поместить все не квадратные фигуры, у вас будет много свободного места.
В качестве альтернативы вы можете использовать класс осей .
fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')
Лучше plt.axis('scaling')
, он работает лучше, если вы хотите изменить оси с помощью xlim()
и ylim()
.