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]?对此的解释是很棒的!谢谢!

最佳答案

据我所知,imshow通常用于显示图像。然后使用范围来定义其大小,例如,您可能希望将图像作为绘图的背景。

相反,我认为您会发现使用pcolora demo can be found here更直观。它的工作原理与imshow大致相同,因此您只需提供Z即可。但是,您也可以为其指定XY数组。这样,您可以真正检查是否正确提供了值:

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)

这更干净,计算速度更快。

关于numpy - 用meshgrid和imshow绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23768618/

10-12 23:45