我设法绘制了我的数据,并希望为其添加背景图像(地图).数据由长/纬度值绘制,我也有图像的三个角(左上角,右上角和左下角)的长/纬度值.
我试图找出如何使用imshow'extent'选项.但是,我发现的例子没有解释如何为每个角分配x和y(在我的例子中,我有三个角的信息).
将图像添加到图中时,如何为图像指定三个角的位置?
谢谢
我不知道这里有什么问题.
import matplotlib.pyplot as plt
im = plt.imshow(plt.imread('tas.png'))
plt.show()
Run Code Online (Sandbox Code Playgroud)
并且Y轴已反转.
所以我写了一个论点origin='lower'.
im = plt.imshow(plt.imread('tas.png'), origin='lower')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我得到了什么.
Y轴正常,但现在图像已经反转.
此外,当我尝试重新缩放X轴和Y轴时,图像没有变小,只有切出一块.
先感谢您.我会非常感谢你的帮助.
当你想要绘制一个numpy数组时imshow,这就是你通常做的事情:
import numpy as np
import matplotlib.pyplot as plt
A=np.array([[3,2,5],[8,1,2],[6,6,7],[3,5,1]]) #The array to plot
im=plt.imshow(A,origin="upper",interpolation="nearest",cmap=plt.cm.gray_r)
plt.colorbar(im)
Run Code Online (Sandbox Code Playgroud)
在该图像中,简单地从阵列中每个值的位置提取x和y坐标.现在,假设这A是一个引用某些特定坐标的值数组:
real_x=np.array([[15,16,17],[15,16,17],[15,16,17],[15,16,17]])
real_y=np.array([[20,21,22,23],[20,21,22,23],[20,21,22,23]])
Run Code Online (Sandbox Code Playgroud)
这些价值构成了我的理由.有没有办法强制imshow在A对应的坐标对(real_x,real_y)中分配每个值?
PS:我不是在寻找向基于数组的x和y添加或减去某些东西以使它们与real_x和real_y匹配,而是用于从real_x和real_y数组中读取这些值的东西.然后,预期结果是具有x轴上的real_x值和y轴上的real_y值的图像.
import matplotlib.pyplot as plt
import numpy as np
n = 16
im = np.eye(n)
fig = plt.figure()
ax = fig.add_subplot(121)
ax.imshow(im)
ax = fig.add_subplot(122)
ax.imshow(im, extent=(0, n, 0, n))
plt.show()
Run Code Online (Sandbox Code Playgroud)
我本来希望这样extent,两个数字(几乎)相同,但它们不是:注意 y 轴是如何翻转的。更令人讨厌的是,右边的数字是错误的:原点的值显示为0,而显示为1。
如果我在范围内翻转 y 参数,extent=(0, n, n, 0),我会得到预期的行为。
据我了解, 的extent论点的描述imshow,
范围:标量(左、右、下、上),可选,默认:
None数据坐标中左下角和右上角的位置。如果
None,则图像的位置使得像素中心落在从零开始的(行、列)索引上。
对这种行为并不是很明确。
我的问题是,为什么会发生这种翻转,为什么我们必须在一定程度上反转顶部/底部以获得预期的行为?
编辑
我已经阅读了这个问题,OP 没有提到翻转问题,答案也没有带来问题。
设置origin='lower'元素确实带来了第一个图像像素,(0,0)但图像随后颠倒显示。
我相信有一个简单的解释可以始终如一地解释这些行为,但还不能完全确定。