2009-08-28 22 views
13

¿Cómo puedo cambiar el origen de una gráfica matplotlib para que esté en la esquina superior izquierda, en lugar de la esquina inferior izquierda predeterminada? Estoy usando matplotlib.pylab.plot para producir el gráfico (aunque si hay otra rutina de trazado que sea más flexible, háganmelo saber).Matplotlib coord. origen del sistema a la parte superior izquierda

Estoy buscando el equivalente del comando matlab: axis ij;

Además, he pasado un par de horas navegando por matplotlib help y google pero no he encontrado una respuesta. También sería útil algo de información sobre dónde podría haber buscado la respuesta.

Respuesta

8

Para una imagen o un gráfico de contorno, puede usar la palabra clave origin = None | 'lower' | 'upper' y para un diagrama de línea, puede establecer los ylimits de mayor a menor.

from pylab import * 
A = arange(25)/25. 
A = A.reshape((5,5)) 

figure() 
imshow(A, interpolation='nearest', origin='lower') 

figure() 
imshow(A, interpolation='nearest') 

d = arange(5) 
figure() 
plot(d) 
ylim(5, 0) 

show() 
+1

Establecer directamente los límites del eje con "ylim ([y1, y2])" o "eje ([x1, x2, y1, y2])" funcionará. No es completamente genérico, pero estoy seguro de que puedo descifrar algo para hacerlo genérico. Tal vez el comando setp sugerido arriba. ¡Gracias por la ayuda! – Nate

+0

truco de palabra clave resuelto mi problema. +1 – heltonbiker

12

axis ij simplemente hace que el eje y aumente hacia abajo en vez de hacia arriba, ¿no? Si es así, entonces matplotlib.axes.invert_yaxis() podría ser todo lo que necesita, pero no puedo probarlo ahora.

Si eso no funciona, me encontré a mailing post lo que sugiere que

setp(gca(), 'ylim', reversed(getp(gca(), 'ylim'))) 

puede hacer lo que quiere parecerse a axis ij.

+0

Nunca pude hacer funcionar invert_yaxis(). Si lo hiciera, sería ideal. Por lo que pude juntar, el comando setp debería funcionar, pero "invertido" devuelve un iterador. No pude hacer que devolviera una secuencia, aunque todavía soy relativamente nuevo en esto. Entonces puede ser fácil. – Nate

4

La siguiente es una forma básica para lograr este

ax=pylab.gca() 

ax.set_ylim(ax.get_ylim()[::-1]) 
10

La forma más sencilla es utilizar:

plt.gca().invert_yaxis() 

Origen funciona sólo para imshow.

+0

Esto funcionó muy bien al poner mapas en imágenes satelitales con Cartopy. Tenga en cuenta que, al menos en mi caso de uso, esto tiene que ejecutarse DESPUÉS de 'imshow()' .Gracias! – kevinmicke

3

Este

plt.ylim(max(plt.ylim()), min(plt.ylim())) 

tiene una ventaja sobre este

plt.gca().invert_yaxis() 

y es que si se encuentra en modo interactivo y se trazan varias veces la misma parcela (tal vez con datos actualizados y tener un punto de interrupción después de la trama) el eje y no seguirá invirtiendo todo el tiempo.

Cuestiones relacionadas