Як зрівняти шкали осі x та осі y в матплотлібі Python?


128

Я хочу намалювати лінії на квадратному графіку.

Масштаби x-axisі y-axisповинні бути однаковими.

наприклад, х варіюється від 0 до 10, і це 10 см на екрані. y також має варіюватися від 0 до 10 і також повинна бути 10 див.

Квадратну форму потрібно підтримувати, навіть якщо я псуюся з розміром вікна.

Наразі мій графік масштабується разом із розміром вікна.

Як я можу цього досягти?

ОНОВЛЕННЯ:

Я спробував наступне, але не вийшло.

plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.axis('equal')

Це працює для мене. Чи можете ви розмістити весь приклад коду, який не працює? А ви можете пояснити, що не працює? Ви хочете лише шкалу Самена? Або також того ж діапазону?
joris

1
@joris в основному я хочу фіксований графік SQUARE. Навіть якщо я максимізую вікно, я сподіваюся, що КВІР зарезервований. Мій екран широкий, після того, як я максимізую вікно, графік також стає прямокутним. Я хочу, щоб це було все-таки SQUARE
Sibbs Gambling

Знову ж, можете опублікувати повний приклад коду. Оскільки дана відповідь повинна це зробити, збережіть її як квадрат. Не зберігайте його ширину чи висоту, але зберігайте форму.
joris

2
Будь-ласка, намагайтеся бути трохи менш абразивними, коли взаємодієте з іншими на SO. Ви отримуєте допомогу від доброти людей, тому дійте трохи менше прав.
tacaswell

для 3d ви повинні зробити трохи додаткової роботи: stackoverflow.com/questions/13685386/…
Тревор Бойд Сміт

Відповіді:


179

Для цього вам потрібно заглибитися трохи глибше, щоб зробити це:

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()

doc для set_aspect


4
Дивовижно! Це справді працює як шарм. Скажіть, будь ласка, що plt.plot(range(5))і що plt.gca().set_aspect('equal', adjustable='box')робити, якщо ви не заперечуєте? Також я зауважую, що навіть якщо я цього не маю plt.draw(), сюжет все одно з’явиться. Тоді в чому це користь?
Сіббс азартні ігри

plotпросто є що показати. Для set_aspectознайомлення з посиланням на документацію. Це drawпросто для того, щоб переконатися, що воно виноситься.
tacaswell

1
мати деякі підроблені дані для побудови (він повинен був побудувати пряму лінію).
tacaswell

1
@ perfectionm1ng не хвилюйтесь, знадобилося мені час, щоб зрозуміти, що ви просите.
tacaswell

1
Чи є спосіб зробити це без того, щоб точно вказувати межі? Я б очікував, що буде проста команда отримати квадратний сюжет з однаковим масштабом і тиками для обох осей. Спасибі
Збентежений

70
plt.axis('scaled')

добре працює для мене.


Також працював на мене. Просто не забудьте використати це перед встановленням обмежень / кліщів, оскільки воно автоматично зміниться.
Андрій

3
Вибачте, plt.axis ('масштабований') не працював для мене в Python 3.7, а matplotlib - matplotlib == 3.1.0 Однак plt.axis ('квадрат') працював!
rishi jain

19

Спробуйте щось на кшталт:

import pylab as p
p.plot(x,y)
p.axis('equal')
p.show()

Це працює в моїй системі, можливо, ви могли б показати частину коду, над яким працюєте? Можливо, можна швидше вирішити проблему.
Dman2

Це взагалі НЕ працює. Осі рівні, але сюжет не квадратний, за винятком випадків, коли вікно графіку також є квадратним. Тестований на Matplotlib 2.0
divenex

P.axis('equal')здається, схоже P.gca().set_aspect('equal', adjustable='datalim'). Хоча якщо adjustable='box', то сюжет стає квадратним.
Євгеній Сергєєв

Я точно не виймаю з цього квадратну коробку.
Пітер Дрейк

Пілаб застарілий
eric

19

Дивіться документацію на plt.axis(). Це:

plt.axis('equal')

не працює, оскільки це змінює межі осі, щоб кола виглядали круглими. Що ви хочете, це:

plt.axis('square')

Це створює квадратну ділянку з рівними осями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.