Як зрівняти шкали осі 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.