如何为Matplotlib的3D plot_surface添加Z轴偏移至XY平面?
解决Matplotlib 3D曲面图Z轴偏移问题
我用Matplotlib绘制3D曲面图时,曲面位于Z轴0点上方超出预期范围,想要把整个曲面下移到Z=-160的位置(贴合XY平面),但查了plot_surface的文档没找到直接设置偏移的参数。当前代码如下:
ax = plt.figure().add_subplot(projection='3d') ax.set(xlim=(-3, 2), ylim=(0.25, 2), zlim=(-160, 0), xlabel='CV1', ylabel='CV2', zlabel='free energy (kJ/mol)') ax.plot_surface(xvals, yvals, zvals, edgecolor='royalblue', lw=0.8, rstride=1, cstride=1,alpha=0.3, cmap= 'plasma') ax.contour(xvals, yvals, zvals, zdir='z', offset= -160, cmap='plasma') plt.savefig('myplot.png') plt.show()(xvals、yvals、zvals为重塑后的ndarray,形状为(101,101))
想要实现的效果是曲面底部贴合在Z=-160的平面上,和已设置的等高线位置对应。
不需要找plot_surface的偏移参数,直接调整你的zvals数据即可——给zvals的每个元素都减去160(即添加偏移量-160),这样整个曲面就会整体下移到目标位置。
修改后的代码如下:
ax = plt.figure().add_subplot(projection='3d') ax.set(xlim=(-3, 2), ylim=(0.25, 2), zlim=(-160, 0), xlabel='CV1', ylabel='CV2', zlabel='free energy (kJ/mol)') # 给zvals添加偏移量-160,整体下移曲面 ax.plot_surface(xvals, yvals, zvals - 160, edgecolor='royalblue', lw=0.8, rstride=1, cstride=1,alpha=0.3, cmap= 'plasma') # 同步修改等高线的Z轴数据,保证和曲面对应 ax.contour(xvals, yvals, zvals - 160, zdir='z', offset= -160, cmap='plasma') plt.savefig('myplot.png') plt.show()
说明
plot_surface完全依赖传入的Z轴数据值定位,直接修改数据是最直接有效的偏移方式- 必须同步修改
contour里的zvals,否则等高线会和下移后的曲面不匹配,无法达到预期的贴合效果
内容的提问来源于stack exchange,提问作者Menelaos
相关产品推荐
相关产品推荐

