2011-10-05 16 views
14

मेरे पास 2 डी arrays में प्रदर्शित कई (27) छवियां हैं जिन्हें मैं imshow() के साथ देख रहा हूं। मुझे हर छवि में एक ही स्थान पर ज़ूम इन करने की आवश्यकता है। मुझे पता है कि मैं मैन्युअल रूप से ज़ूम कर सकता हूं, लेकिन यह थकाऊ है और पर्याप्त सटीक नहीं है। क्या पूरी चीज के बजाय छवि के एक विशिष्ट खंड को प्रोग्रामेटिक रूप से निर्दिष्ट करने का कोई तरीका है?Matplotlib imshow ज़ूम फ़ंक्शन?

उत्तर

11

आप plt.xlim और plt.ylim इस्तेमाल कर सकते हैं क्षेत्र स्थापित करने के लिए साजिश रची जा करने के लिए:

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

धन्यवाद! मुझे एहसास हुआ कि मैं सरणी प्री-डिस्प्ले को भी फसल कर सकता हूं, लेकिन आपकी विधि शेष सरणी को सुरक्षित रखती है। – Andruf

+0

उत्कृष्ट परिचय में * [विज्ञान के लिए पायथन के साथ शुरू करना] (http://scipy-lectures.github.io/) *, यह matplotlib खंड में है, * [1.4। Matplotlib: साजिश, 1.4.2.4। सीमा तय करना] (http://scipy-lectures.github.io/intro/matplotlib/matplotlib.html#setting-limits) *। –

3

आप अपनी छवि के बाकी की जरूरत नहीं है, तो आप एक समारोह है कि निर्देशांक आप चाहते हैं पर चित्र काटने के लिए परिभाषित कर सकते हैं और फिर फसल छवि प्रदर्शित करें।

नोट: यहां 'x' और 'y' दृश्य x और y (क्रमशः छवि पर क्षैतिज अक्ष और लंबवत धुरी) हैं, जिसका अर्थ है कि यह वास्तविक x (पंक्ति) और y (कॉलम) की तुलना में उलटा हुआ है) 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() 
संबंधित मुद्दे