如何在matplotlib.pyplot.imshow中使用'extent'

时间:2011-08-09 16:34:55

标签: python plot matplotlib

我设法绘制了我的数据,并希望为其添加背景图像(地图)。 数据由长/纬度值绘制,我有图像的三个角(左上角,右上角和左下角)的长/纬度值。

我试图弄清楚如何在imshow中使用'extent'选项。但是,我发现的例子没有解释如何为每个角分配x和y(在我的例子中,我有三个角的信息)。

将图像添加到图中时,如何为图像指定三个角的位置?

由于

2 个答案:

答案 0 :(得分:35)

范围定义水平和垂直值的图像最大值和最小值。它需要四个值: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选项,否则“上限”默认值就是您想要的。

答案 1 :(得分:10)

以下是基于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