¿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')
Juegos de azar de Sibbs
fuente
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

Tacaswell
fuente
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.

myx
fuente
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()
Dman2
fuente
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.

Adam Stewart
fuente