Imshow和meshgrid不按我想象的方式工作。我为2D中的给定(x,y)点定义了一些函数,它返回标量f(x,y)。我想使用imshow来显示函数f。
x = np.linspace(0,4)
y = np.linspace(0,1)
X,Y = np.meshgrid(x,y)
Z = np.zeros((50,50))
for i in range(50):
for j in range(50):
Z[i,j] = f(X[i,j],Y[i,j])
fig = plt.figure()
plt.imshow(Z,extent=[0,4,1,0])
plt.show()
除了在我认为它应该是[0,4,0,1]的程度之外,这是按预期工作的......我是否错误地为每个(x,y)对定义了Z [i,j]?解释这是如何工作将是伟大的!谢谢!
答案 0 :(得分:11)
据我所知,imshow
通常用于显示图像。然后使用范围来定义它应该有多大,比如你可能想要将图像作为图的背景。
相反,我认为您会发现使用pcolor
,a demo can be found here更直观。它的工作原理与imshow
大致相同,因此您只需提供Z
即可。但是,您也可以为其提供X
和Y
数组。这样您就可以真正检查是否正确提供了值:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,4)
y = np.linspace(0,1)
def f(x, y):
return y * np.sin(x)
X, Y = np.meshgrid(x,y)
Z = np.zeros((50,50))
for i in range(50):
for j in range(50):
Z[i,j] = f(X[i,j],Y[i,j])
plt.pcolor(X, Y, Z)
plt.show()
我添加了一个显示它有效的功能。请注意,如果您的函数能够处理numpy数组,则可以使用
替换Z
和嵌套for循环的初始化
X, Y = np.meshgrid(x,y)
Z = f(X, Y)
这更干净,计算速度更快。