Matplotlib imshow функция масштабирования? - PullRequest
17 голосов
/ 05 октября 2011

У меня есть несколько (27) изображений, представленных в 2D массивах, которые я просматриваю с помощью imshow (). Мне нужно увеличить одно и то же место на каждом изображении. Я знаю, что могу вручную увеличивать масштаб, но это утомительно и недостаточно точно. Есть ли способ программно указать определенный фрагмент изображения для показа вместо всего этого?

Ответы [ 2 ]

16 голосов
/ 05 октября 2011

Вы можете использовать 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()
3 голосов
/ 06 октября 2011

Если вам не нужна остальная часть вашего изображения, вы можете определить функцию, которая обрезает изображение по желаемым координатам, а затем отображает обрезанное изображение.

Примечание: здесь «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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...