当您想使用imshow绘制一个numpy数组时,通常会执行以下操作:

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)

这给了我们这个简单的图像:
python - Matplotlib:如何使imshow从其他numpy数组中读取x,y坐标?-LMLPHP

在此图像中,简单地从数组中每个值的位置提取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]])

这些值是根据我的情况而编造的。 是否有一种方法可以强制imshow为A中的每个值分配对应的一对坐标(real_x,real_y)?

PS:我不是要在基于数组的x和y中添加或减去某些东西以使其与real_x和real_y匹配,而是要从real_x和real_y数组中读取这些值。然后,预期的结果是在x轴上具有real_x值且在y轴上具有real_y值的图像。

最佳答案

设定范围

假设你有

real_x=np.array([15,16,17])
real_y=np.array([20,21,22,23])

您可以将图像范围设置为
dx = (real_x[1]-real_x[0])/2.
dy = (real_y[1]-real_y[0])/2.
extent = [real_x[0]-dx, real_x[-1]+dx, real_y[0]-dy, real_y[-1]+dy]
plt.imshow(data, extent=extent)

更改刻度标签

另一种方法是只更改刻度标签
real_x=np.array([15,16,17])
real_y=np.array([20,21,22,23])
plt.imshow(data)
plt.gca().set_xticks(range(len(real_x)))
plt.gca().set_yticks(range(len(real_x)))
plt.gca().set_xticklabels(real_x)
plt.gca().set_yticklabels(real_y)

关于python - Matplotlib:如何使imshow从其他numpy数组中读取x,y坐标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44260491/

10-10 14:00
查看更多