matplotlib.pyplot, сохранить соотношение сторон графика - PullRequest
42 голосов
/ 29 мая 2010

Предполагая, что у нас есть координаты многоугольника как polygon = [(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 независимо от того, как я изменяю размер окна.)

Ответы [ 4 ]

77 голосов
/ 29 мая 2010

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

plt.axis('equal')
18 голосов
/ 03 октября 2010

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

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

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

10 голосов
/ 14 марта 2016

«масштабируется» с использованием plt

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

 plt.axis('scaled')

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

Равные

enter image description here

Чешуйчатый

enter image description here

равный 'unsing топор

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

fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')
0 голосов
/ 16 ноября 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...