¿Cómo ecualizar las escalas del eje xy del eje y en Python matplotlib?


128

Deseo dibujar líneas en un gráfico cuadrado.

Las escalas de x-axisy y-axisdeben ser las mismas.

por ejemplo, x va de 0 a 10 y es 10 cm en la pantalla. y también debe oscilar entre 0 y 10 y debe ser también de 10 cm.

La forma cuadrada debe mantenerse, incluso si me meto con el tamaño de la ventana.

Actualmente, mi gráfico se escala junto con el tamaño de la ventana.

¿Cómo puedo lograr esto?

ACTUALIZAR:

Intenté lo siguiente, pero no funcionó.

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

Me está funcionando. ¿Puedes publicar un ejemplo de código completo que no funcione? ¿Y puede explicar qué no funciona? ¿Quieres solo la escala de samen? ¿O también la misma gama?
joris

1
@joris básicamente quiero un gráfico CUADRADO fijo. Incluso si maximizo la ventana, espero que el CUADRADO esté reservado. Mi pantalla es ancha, después de maximizar la ventana, el gráfico también se vuelve rectangular. Quiero que siga siendo CUADRADO
Sibbs Gambling

Nuevamente, ¿puede publicar un ejemplo de código completo? Debido a que la respuesta dada debería hacer eso, consérvela como un cuadrado. No conserva su ancho o alto, pero conserva su forma.
joris

2
Intente ser un poco menos abrasivo al interactuar con otros en SO. Estás recibiendo ayuda de la bondad de la gente, así que actúa con menos derecho.
tacaswell

para 3d, tienes que hacer un poco más de trabajo: stackoverflow.com/questions/13685386/…
Trevor Boyd Smith

Respuestas:


179

Necesita profundizar un poco más en la API para hacer esto:

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 para set_aspect


4
¡Increíble! De hecho, funciona a las mil maravillas. ¿Podría decirme qué plt.plot(range(5))y plt.gca().set_aspect('equal', adjustable='box')hacer, si no le importa? Además, me doy cuenta de que incluso si no lo tengo plt.draw(), la trama seguirá apareciendo. Entonces, ¿de qué sirve?
Sibbs Gambling

el plotse acaba de tener algo que mostrar. Para set_aspectleer el enlace de documentación. El drawes sólo para asegurarse de que se dicte.
tacaswell

1
tener algunos datos falsos para trazar (debería haber trazado una línea recta).
tacaswell

1
@ perfectionm1ng no te preocupes, me tomó un tiempo averiguar lo que estabas preguntando.
tacaswell

1
¿Hay alguna manera de hacer esto sin tener que especificar exactamente los límites? Habría esperado que hubiera un comando simple para obtener un diagrama cuadrado con la misma escala y marcas para ambos ejes. Gracias
Confundido

70
plt.axis('scaled')

funciona bien para mi.


También funcionó para mí. Solo asegúrese de usar esto antes de establecer límites / ticks, ya que se cambiará la escala automáticamente.
Andrew

3
Lo siento, plt.axis ('escalado') no funcionó para mí en Python 3.7 y matplotlib - matplotlib == 3.1.0 Sin embargo, plt.axis ('cuadrado') funcionó!
rishi jain

19

Prueba algo como:

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

Esto funciona en mi sistema, ¿quizás podría mostrar una parte del código en el que está trabajando? Podría ayudar a resolver el problema más rápido.
Dman2

Esto NO funciona en general. Los ejes son iguales, pero el gráfico no es cuadrado, a menos que la ventana de trazado también sea cuadrada. Probado con Matplotlib 2.0
divenex

P.axis('equal')parece ser como P.gca().set_aspect('equal', adjustable='datalim'). Mientras que si adjustable='box', entonces la trama se vuelve cuadrada.
Evgeni Sergeev

Definitivamente no saco un cuadrado de esto.
Peter Drake

Pylab está en desuso
Eric

19

Consulte la documentación en plt.axis(). Esta:

plt.axis('equal')

no funciona porque cambia los límites del eje para hacer que los círculos parezcan circulares. Lo que quieres es:

plt.axis('square')

Esto crea una gráfica cuadrada con ejes iguales.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.