Как уравнять масштабы оси x и оси y в Python matplotlib?

128

Я хочу нарисовать линии на квадратном графике.

Масштабы x-axisи y-axisдолжны быть одинаковыми.

например, x находится в диапазоне от 0 до 10, а на экране это 10 см. y также должен находиться в диапазоне от 0 до 10 и также должен составлять 10 см.

Квадратная форма должна быть сохранена, даже если я возился с размером окна.

В настоящее время мой график масштабируется вместе с размером окна.

Как я могу этого добиться?

ОБНОВИТЬ:

Я пробовал следующее, но это не сработало.

plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.axis('equal')
Sibbs Gambling
источник
У меня это работает. Можете ли вы опубликовать весь пример кода, который не работает? А можно объяснить, что не работает? Вы хотите только тот же масштаб? Или тоже такой же диапазон?
joris 01
1
@joris в основном мне нужен фиксированный квадратный график. Даже если я разверну окно до максимума, я надеюсь, что КВАДРАТ зарезервирован. У меня широкий экран, после развертывания окна график также становится прямоугольным. Я хочу, чтобы все было по-прежнему ПЛОЩАДЬ
Sibbs Gambling
Опять же, можете ли вы опубликовать полный пример кода. Поскольку данный ответ должен делать это, сохраните его в виде квадрата. Не сохранять ширину и высоту, а сохранять форму.
joris
2
Пожалуйста, постарайтесь быть немного менее резким при общении с другими на SO. Вы получаете помощь от доброты людей, поэтому действуйте немного менее правомочно.
tacaswell 01
для 3D вам нужно проделать небольшую дополнительную работу: stackoverflow.com/questions/13685386/…
Trevor Boyd Smith

Ответы:

179

Для этого вам нужно немного углубиться в api:

from matplotlib import pyplot as plt
plt.plot(range(5))
plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.gca().set_aspect('equal', adjustable='box')
plt.draw()

документ для set_aspect

tacaswell
источник
4
Потрясающие! Это действительно работает как шарм. Подскажите, пожалуйста, что plt.plot(range(5))и plt.gca().set_aspect('equal', adjustable='box')делать, если не возражаете? Кроме того, я замечаю, что даже если у меня его нет plt.draw(), сюжет все равно появится. Тогда какая от этого польза?
Sibbs Gambling 02
plotпросто есть что показать. Для set_aspectчтения ссылки документации. Это drawпросто для того, чтобы убедиться, что он отображается.
tacaswell 02
1
чтобы иметь какие-то поддельные данные для построения (он должен был построить прямую линию).
tacaswell 02 авг.13,
1
@ perfectionm1ng, не беспокойтесь, мне потребовалось время, чтобы понять, о чем вы спрашиваете.
tacaswell 02 авг.13,
1
Есть ли способ сделать это без точного указания ограничений? Я ожидал, что будет простая команда для получения квадратного графика с одинаковым масштабом и отметками для обеих осей. Спасибо
Confounded
70
plt.axis('scaled')

у меня хорошо работает.

MYX
источник
Также работал у меня. Просто убедитесь, что вы используете это перед установкой лимитов / тиков, так как масштаб будет изменяться автоматически.
Эндрю
3
Извините, plt.axis ('scaled') не работал у меня в Python 3.7 и matplotlib - matplotlib == 3.1.0 Однако plt.axis ('square') работал!
риши джайн
19

Попробуйте что-нибудь вроде:

import pylab as p
p.plot(x,y)
p.axis('equal')
p.show()
Dman2
источник
Это работает в моей системе, возможно, вы могли бы показать часть кода, над которым вы работаете? Возможно, поможет решить проблему быстрее.
Dman2 01
В общем, это НЕ работает. Оси равны, но график не квадратный, если только окно построения также не квадратное. Протестировано с помощью Matplotlib 2.0
divenex
P.axis('equal')вроде бы нравится P.gca().set_aspect('equal', adjustable='datalim'). А если adjustable='box', то сюжет становится квадратным.
Евгений Сергеев
У меня точно квадратная коробка из этого не получается.
Питер Дрейк
pylab устарел
eric
19

См. Документацию на plt.axis(). Это:

plt.axis('equal')

не работает, потому что он изменяет пределы оси, чтобы круги выглядели круглыми. Вы хотите:

plt.axis('square')

Это создает квадратный участок с равными осями.

Адам Стюарт
источник