如何在matplotlib.pyplot.imshow中使用“extent”

38
我已经成功绘制了数据图,现在想为其添加一张背景图片(地图)。数据是通过经纬度值绘制的,并且我也有该图像三个角(左上角、右上角和左下角)的经纬度值。
我正在尝试使用'extent'选项与imshow函数配合使用。但是,我找到的示例没有说明如何为每个角分配x和y坐标(在我的情况下,我有三个角的信息)。
当将图像添加到图表时,如何为其指定这三个角的位置?
谢谢。

1
请查看imshow教程中的原点和范围 - ImportanceOfBeingErnest
2个回答

53

在当前坐标系的坐标中指定矩形的角落,以便将图像放置在其上方

Extent定义左右和底部和顶部的限制。它需要四个值,如下所示: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选项,否则默认为'upper'。


还是不太清楚。你所说的“水平值的最大值”指的是什么?没有水平的值:只有一个二维矩阵。你是指每行中的最大值吗?但是每行都有很多个最大值。你是指这些最大值之间的最大值吗?但是那样水平和垂直都是一样的。 - Victor Eijkhout
最大值是绘图矩阵右侧写的数字,最小值是左侧的数字。 - Yann

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()

如果您不设置轴限制,它们会变成您的范围,然后似乎没有任何效果。

Ada Lovelace image with inset


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接