2011-10-05 17 views
14

Tengo varias (27) imágenes representadas en matrices en 2D que estoy viendo con imshow(). Necesito hacer un acercamiento exacto en cada imagen. Sé que puedo hacer zoom manualmente, pero esto es tedioso y no lo suficientemente preciso. ¿Hay alguna manera de especificar programáticamente una sección específica de la imagen para mostrar en lugar de todo?Matplotlib imshow función de zoom?

Respuesta

11

Usted podría utilizar plt.xlim y plt.ylim para establecer la región a ser trazado:

import matplotlib.pyplot as plt 
import numpy as np 

data=np.arange(9).reshape((3,3)) 
plt.imshow(data) 
plt.xlim(0.5, 1.5) 
plt.ylim(0.5,1.5) 
plt.show() 
+0

Gracias! Me di cuenta de que también puedo recortar la vista previa de la matriz, pero su método conserva el resto de la matriz. – Andruf

+0

En la excelente introducción * [Comenzando con Python para la ciencia] (http://scipy-lectures.github.io/) *, esto está en la sección matplotlib, * [1.4. Matplotlib: trazado, 1.4.2.4. Establecer límites] (http://scipy-lectures.github.io/intro/matplotlib/matplotlib.html#setting-limits) *. –

3

Si usted no necesita el resto de la imagen, se puede definir una función que recortar la imagen en las coordenadas que desea y luego mostrar la imagen recortada.

Nota: aquí 'x' e 'y' son la vista xey (eje horizontal y eje vertical en la imagen, respectivamente), lo que significa que está invertido en comparación con la x real (fila) ey (columna) de la matriz NumPy.

import scipy as sp 
import numpy as np 
import matplotlib.pyplot as plt 

def crop(image, x1, x2, y1, y2): 
    """ 
    Return the cropped image at the x1, x2, y1, y2 coordinates 
    """ 
    if x2 == -1: 
     x2=image.shape[1]-1 
    if y2 == -1: 
     y2=image.shape[0]-1 

    mask = np.zeros(image.shape) 
    mask[y1:y2+1, x1:x2+1]=1 
    m = mask>0 

    return image[m].reshape((y2+1-y1, x2+1-x1)) 

image = sp.lena() 
image_cropped = crop(image, 240, 290, 255, 272) 

fig = plt.figure() 
ax1 = fig.add_subplot(121) 
ax2 = fig.add_subplot(122) 

ax1.imshow(image) 
ax2.imshow(image_cropped) 

plt.show() 
Cuestiones relacionadas