我在这种形式的csv中有数据:
X,Y,Z
0,0,0.0
0,1,0.0
1,0,1.0
1,1,0.55
2,0,4.0
2,1,3.216
我不确定如何将此数据提供给pcolormesh
。我想我必须使用np.meshgrid
,但在这种情况下我不确定如何处理。
dat = pd.read_csv('my_dat.csv')
plt.pcolormesh(dat['X'], dat['Y'], dat['Z'])
plt.show()
Value error: need more than one value to unpack
我不明白 - 为什么这不起作用?
答案 0 :(得分:3)
您的数据只需要重新塑造。这里不需要使用np.meshgrid
,因为每个单元格已经有x和y坐标。
如果您在x中有nx
坐标,在y中有ny
坐标,那么您可以这样做:
X = dat['X'].reshape(nx,ny).T
Y = dat['Y'].reshape(nx,ny).T
Z = dat['Z'].reshape(nx,ny).T
plt.pcolormesh(X,Y,Z)
plt.show()
请注意,pcolormesh希望您的x
和y
维度比z
维度大一倍,因为x
和y
定义了边缘单元格中,z
定义单元格中心的颜色。来自文档:
理想情况下,X和Y的尺寸应大于C的尺寸;如果尺寸相同,则忽略C的最后一行和一列。
因此,在您的示例中,除非您添加x和y坐标1大于单元格数的虚拟单元格的行和列,否则最终行和列中的颜色将会丢失。另一种方法是使用plt.contourf
,其中x,y和z应该是相同的长度。