python菜鸟求助,使用matplotlib 绘制contour等高线图,z为2D数组?

有一系列点坐标如下所示:
x,y,z
74,781,5
1373,731,11
1321,1791,28
0,1787,4
1049,2127,12
1647,2728,6
2883,3617,15
2383,3692,7
2708,2295,22
2933,1767,7
4233,895,6
4043,1895,14
想通过contour生成等高线图,代码如下:
from pylab import *
import numpy as np
x,y,z=np.loadtxt('fenbu.csv',delimiter=',',unpack='True')

X,Y = np.meshgrid(x,y)

contourf(X, Y, z, 8, alpha=.75, cmap='jet')
C = contour(X, Y,z, 8, colors='black', linewidth=.5)
show()


TypeError: Input z must be a 2D array.

按道理z不应该是高程value么,怎么会是2D数组呢。
python菜鸟求助。

阅读 14.9k
1 个回答

contourf函数入参要的是3个二维数组,你需要将x,y,z转换下。给你个python pandas数据3列转换函数:

def matrix3d(data, columnXName, columnYName, columnZName, aggFun):

groupby = data.groupby([columnXName, columnYName])
aggdata = groupby.agg({columnXName:"first", columnYName:"first", columnZName:aggFun})
lenX = len(aggdata.index.levels[0])
lenY = len(aggdata.index.levels[1])
matrixX = np.zeros((lenX, lenY))
matrixY = np.zeros((lenX, lenY))
matrixZ = np.zeros((lenX, lenY))
for i in range(0, lenX):
    for j in range(0, lenY):
        matrixX[i, j] = aggdata.iloc[i * lenY + j, 0]
        matrixY[i, j] = aggdata.iloc[i * lenY + j, 1]
        matrixZ[i, j] = aggdata.iloc[i * lenY + j, 2]
return matrixX, matrixY, matrixZ
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题