2011-08-09 12 views
23

Logré trazar mis datos y me gustaría agregarle una imagen de fondo (mapa). Los datos están graficados por los valores long/lat y tengo los valores long/lat para las tres esquinas de la imagen (arriba a la izquierda, arriba a la derecha y abajo a la izquierda) también.cómo usar 'extent' en matplotlib.pyplot.imshow

Estoy tratando de averiguar cómo usar la opción 'extent' con imshow. Sin embargo, los ejemplos que encontré no explican cómo asignar xey para cada esquina (en mi caso, tengo la información para tres esquinas).

¿Cómo puedo asignar la ubicación de tres esquinas para la imagen cuando la agrego a la trama?

Gracias

Respuesta

29

Extensión define el imágenes max y min de los valores horizontales y verticales. Toma cuatro valores como ese: extent=[horizontal_min,horizontal_max,vertical_min,vertical_max].

Suponiendo que tiene longitud a lo largo del eje horizontal, entonces tomará extent=[longitude_top_left,longitude_top_right,latitude_bottom_left,latitude_top_left]. longitude_top_left y longitude_bottom_left deben ser iguales, latitude_top_left y latitude_top_right deben ser iguales, y los valores dentro de estos pares son intercambiables.

Si el primer elemento de su imagen se debe trazar en la esquina inferior izquierda, utilice también la opción origin='lower' imshow, de lo contrario, el valor predeterminado 'superior' es el que desea.

+0

Todavía no es claro. ¿Qué quiere decir con "max of the horizontal values"? No hay valores que sean horizontales: hay una matriz 2d. ¿Te refieres al máximo en cada fila? Pero hay un montón de ellos. El máximo sobre esos entonces? Pero luego, lo horizontal y lo vertical son lo mismo. –

+0

El máximo es el número escrito en el borde derecho de la matriz en el gráfico, el mínimo es el número en el borde izquierdo. – Yann

8

Aquí hay un ejemplo basado en http://matplotlib.org/examples/pylab_examples/image_demo3.html que muestra el uso de la extensión.

#!/usr/bin/env python 
from pylab import * 
try: 
    from PIL import Image 
except ImportError, exc: 
    raise SystemExit("PIL must be installed to run this example") 

import matplotlib.cbook as cbook 

datafile = cbook.get_sample_data('ada.png') 
h = Image.open(datafile) 
dpi = rcParams['figure.dpi'] 
figsize = h.size[0]/dpi, h.size[1]/dpi 

figure(figsize=figsize) 
ax = axes([0,0,1,1], frameon=False) 
ax.set_axis_off() 
ax.set_xlim(0,2) 
ax.set_ylim(0,2) 
im = imshow(h, origin='upper',extent=[-2,4,-2,4]) # axes zoom in on portion of image 
im2 = imshow(h, origin='upper',extent=[0,.5,0,.5]) # image is a small inset on axes 

show() 

Si no establece sus límites de los ejes, se convierten en sus extensiones & entonces no parece tener ningún efecto.

Ada Lovelace image with inset