Подтвердить что ты не робот

Как использовать "степень" в matplotlib.pyplot.imshow

Мне удалось обработать мои данные и добавить к нему фоновое изображение (карту). Данные строятся по длинным/лат-значениям, и у меня есть длинные/лат-значения для изображения трех углов (вверху слева, вверху справа и внизу слева).

Я пытаюсь выяснить, как использовать опцию 'extent' с imshow. Однако примеры, которые я нашел, не объясняют, как назначить x и y для каждого угла (в моем случае у меня есть информация для трех углов).

Как я могу назначить расположение трех углов для изображения при добавлении его в график?

Спасибо

4b9b3361

Ответ 1

Укажите в координатах текущей оси углы прямоangularьника, в который нужно вставить изображение поверх

Экстент определяет левый и правый пределы, а также нижний и верхний пределы. Принимает четыре значения примерно так: extent=[horizontal_min,horizontal_max,vertical_min,vertical_max].

Предполагая, что у вас есть долгота вдоль горизонтальной оси, используйте extent=[longitude_top_left,longitude_top_right,latitude_bottom_left,latitude_top_left]. longitude_top_left и longitude_bottom_left должны быть одинаковыми, latitude_top_left и latitude_top_right должны быть одинаковыми, а значения в этих парах являются взаимозаменяемыми.

Если ваш первый элемент вашего изображения должен быть нанесен в нижнем левом углу, то используйте также опцию origin='lower' imshow, в противном случае "верхний" по умолчанию - это то, что вам нужно.

Ответ 2

Здесь приведен пример, основанный на http://matplotlib.org/examples/pylab_examples/image_demo3.html, показывающий использование степени.

#!/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()

Если вы не устанавливаете свои пределы оси, они становятся вашими экстентами и тогда, похоже, не имеют никакого эффекта.

Ada Lovelace image with inset