Estoy tratando de hacer un diagrama cuadrado (usando imshow), es decir, una relación de aspecto de 1: 1, pero no puedo. Ninguno de estos funciona:
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
Parece que las llamadas simplemente se están ignorando (un problema que a menudo parece tener con matplotlib).
python
matplotlib
jtlz2
fuente
fuente
ax.axis('equal')
por casualidad? Como todos han dicho, lo que hiciste debería funcionar, peroax.axis
podría ser otra ruta para intentar una solución alternativa.Respuestas:
La tercera es la vencida. Supongo que esto es un error y la respuesta de Zhenya sugiere que está corregido en la última versión. Tengo la versión 0.99.1.1 y he creado la siguiente solución:
Esto es 'force.png':
A continuación se muestran mis intentos infructuosos, pero con suerte informativos.
Segunda respuesta:
Mi 'respuesta original' a continuación es excesiva, ya que hace algo similar a
axes.set_aspect()
. Creo que quieres usaraxes.set_aspect('auto')
. No entiendo por qué este es el caso, pero produce una gráfica de imagen cuadrada para mí, por ejemplo, este script:Produce un gráfico de imagen con una relación de aspecto 'igual': y uno con una relación de aspecto 'automática':
El código proporcionado a continuación en la 'respuesta original' proporciona un punto de partida para una relación de aspecto controlada explícitamente, pero parece que se ignora una vez que se llama a un imshow.
Respuesta original:
Aquí hay un ejemplo de una rutina que ajustará los parámetros de la subparcela para que obtenga la relación de aspecto deseada:
Esto produce una figura como esta:
Me imagino que si tiene varias subparcelas dentro de la figura, querrá incluir el número de subtramas yyx como parámetros de palabras clave (por defecto en 1 cada una) en la rutina proporcionada. Luego, usando esos números y las palabras clave
hspace
ywspace
, puede hacer que todas las subtramas tengan la relación de aspecto correcta.fuente
get_images
hay una lista vacía (como sucedería conax.plot([0,1],[0,2])
, puede usarget_xlim
yget_ylim
¿Cuál es la
matplotlib
versión que está ejecutando? Recientemente tuve que actualizarme y1.1.0
, con él,add_subplot(111,aspect='equal')
funciona para mí.fuente
matplotlib
versión2.0.2
.jupyter notebook
versión5.0.0
. Gracias.Después de muchos años de éxito con las respuestas anteriores, he descubierto que esto no funciona de nuevo, pero encontré una solución de trabajo para las subtramas en
https://jdhao.github.io/2017/06/03/change-aspect-ratio-in-mpl
Con todo el crédito, por supuesto, para el autor anterior (que quizás prefiera publicar aquí), las líneas relevantes son:
El enlace también tiene una explicación muy clara de los diferentes sistemas de coordenadas utilizados por matplotlib.
Gracias por todas las excelentes respuestas recibidas, especialmente @ Yann, que seguirá siendo el ganador.
fuente
deberías probar con figaspect. Esto funciona para mi. De los documentos:
Editar: no estoy seguro de lo que estás buscando. El código anterior cambia el lienzo (el tamaño de la parcela). Si desea cambiar el tamaño de la ventana de matplotlib, de la figura, utilice:
esto produce una ventana de 5x1 (ancho x alto).
fuente
Esta respuesta se basa en la respuesta de Yann. Establecerá la relación de aspecto para gráficos lineales o log-log. He utilizado información adicional de https://stackoverflow.com/a/16290035/2966723 para probar si los ejes son de escala logarítmica.
Obviamente puedes usar cualquier versión de
log
tu que quieras, he usadoscipy
, peronumpy
omath
debería estar bien.fuente