FaC*_*fee 7 python numpy matplotlib imshow
当你想要绘制一个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值的图像.
Imp*_*est 11
假设你有
real_x=np.array([15,16,17])
real_y=np.array([20,21,22,23])
Run Code Online (Sandbox Code Playgroud)
您可以将图像范围设置为
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)
Run Code Online (Sandbox Code Playgroud)
另一种方法是只更改ticklabels
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)
Run Code Online (Sandbox Code Playgroud)