来自 x、y、z 数据的 matplotlib pcolormesh 图

新手上路,请多包涵

我在一个包含三列的表格形式的文本文件中有数据。我使用 np.genfromtxt 将所有列作为 x、y、z 读入 matplotlib。

我想创建一个颜色网格图,其中 x 和 y 是坐标,z 代表颜色,我认为人们将这样的图称为热图。

我的代码如下:

 x = np.genfromtxt('mesh.txt', dtype=float, delimiter=' ', usecols = (0))
y = np.genfromtxt('mesh.txt', dtype=float, delimiter=' ', usecols = (1))
z = np.genfromtxt('mesh.txt', dtype=float, delimiter=' ', usecols = (2))

xmesh, ymesh = np.meshgrid(x,y)
diagram1.pcolormesh(xmesh,ymesh,z)

但我收到以下错误消息:

 line 7154, in pcolormesh
C = ma.ravel(C[0:Ny-1, 0:Nx-1]) # data point in each cell is value at
IndexError: too many indices

文本文件如下:

 1 1 5
2 1 4
3 1 2
4 1 6
1 2 6
2 2 2
3 2 1
4 2 9
1 3 7
2 3 4
3 3 3
4 3 5
1 4 3
2 4 4
3 4 7
4 4 6

这个要怎么解决。

原文由 Paul Eigenthaler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 716
1 个回答

在上面提供的示例数据中,x、y 和 z 可以很容易地重新整形以获得二维数组。下面的答案适用于正在寻找随机 x、y 和 z 数组的更通用答案的人。

 import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
import numpy

# use your x,y and z arrays here
x = numpy.random.randint(1,30, 50)
y = numpy.random.randint(1,30, 50)
z = numpy.random.randint(1,30, 50)

yy, xx = numpy.meshgrid(y,x)
zz = griddata(x,y,z,xx,yy, interp='linear')
plt.pcolor(zz)
#plt.contourf(xx,yy,zz) # if you want contour plot
#plt.imshow(zz)
plt.pcolorbar()
plt.show()

在此处输入图像描述

原文由 Ramesh Koirala 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进