我有一个熊猫数据框,其中有3列(“ X”,“ Y”,“ Z”)。 我需要用表面图来绘制它。 我指的是https://matplotlib.org/gallery/mplot3d/surface3d.html
因此,在值为Data [“ X”],Data [“ Y”]的情况下,表面应为Data [“ Z”]。而且重要的是要有一个彩色的表面来显示它的高度。
我到了:
a, b = np.meshgrid(data['X'], data['Y'])
现在我需要在调用之前定义Z
surf = ax.plot_surface(a, b, Z, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
但这证明比我预期的要难。 我尝试过:
Z=data[data["X"]==a & data["Y"]==b]["Z"]
但这不起作用。有没有一种简单的方法可以从数据帧中提取Z值?
答案 0 :(得分:0)
我找到了解决方案。不仅如@Michael O.所说,我需要在条件周围加上括号。但是我还需要更改mash网络的准备方式:
list_set_x=list(set(data["X"]))
list_set_y=list(set(data["Y"]))
Z=[]
for x in list_set_x:
Z1=[]
for y in list_set_y:
C=float(data[(data["X"]==x)&(data["Y"]==y)]["Z"])
Z1.append(C)
Z.append(Z1)
c=np.array(Z)
e,f=np.meshgrid(list(set_y),list( set_x))
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(f, e, c, cmap=cm.coolwarm, linewidth=0, antialiased=False)