如何在matplotlib.pyplot.imshow中使用'extent
我成功地绘制了我的数据,现在想在图表上添加一张背景图片(地图)。我的数据是通过经纬度值绘制的,而且我也有这张图片三个角落的经纬度值(左上角、右上角和左下角)。
我正在尝试弄清楚如何使用 'extent' 这个选项来配合 imshow。不过,我找到的例子并没有解释如何为每个角落指定 x 和 y 的值(在我的情况下,我有三个角落的信息)。
我该如何在将图片添加到图表时,为这三个角落指定位置呢?
谢谢
2 个回答
12
这里有一个例子,来源于 http://matplotlib.org/examples/pylab_examples/image_demo3.html,展示了如何使用“extent”。
#!/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()
如果你不设置坐标轴的范围,它们就会变成你的“extent”,然后似乎不会产生任何效果。
53
在你当前坐标系中指定你想要图像覆盖的矩形的四个角
这里的“范围”定义了矩形的左右和上下边界。它需要四个值,格式是:extent=[水平最小值,水平最大值,垂直最小值,垂直最大值]
。
假设你的水平轴表示经度,那么可以用extent=[左上角经度,右上角经度,左下角纬度,左上角纬度]
来表示。左上角经度和左下角经度应该是相同的,左上角纬度和右上角纬度也应该是相同的,这对值可以互换。
如果你想把图像的第一个元素放在左下角,那么也要使用origin='lower'
这个选项,否则默认是放在上面的。