2011-10-05 35 views
14

私は、imshow()で表示している2D配列で表現された画像をいくつか持っています。私はすべての画像で正確に同じ場所を拡大する必要があります。私は手動でズームできることを知っていますが、これは面倒であり、十分正確ではありません。プログラム全体ではなく、画像の特定のセクションを指定する方法はありますか?Matplotlib imshowズーム機能?

答えて

11

あなたはプロットされる領域を設定するplt.xlimplt.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

* [Python for scienceの使い方](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 )配列の配列を含む。

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() 
関連する問題