使用Mayavi的mlab.plot3d绘制线段异常:为何显示长方体?
问题原因及解决方法
你的代码问题主要出在两个关键设置上:
错误使用
representation参数
你设置了representation='points',但mlab.plot3d的这个参数配合默认渲染逻辑,会生成不符合预期的形状。如果要绘制线段,应使用默认的'surface'(带管状效果的线段),或者指定'wireframe'(纯线框线段)。未关闭默认管状效果
mlab.plot3d默认会给线段添加立体管状效果,若要绘制极简的直线段,需要显式设置tube_radius=None来关闭该效果。
另外你看到的长方体是mlab.outline(ax1)生成的坐标轴外框,并非你的线段本身,线段被外框遮挡导致你误以为坐标设置错误。
修正后的代码
import numpy as np from mayavi import mlab fig1 = mlab.figure(bgcolor=(1,1,1), fgcolor=(0,0,0)) # 绘制纯直线段:关闭管状效果,调整线宽与颜色 myLine = mlab.plot3d(np.array([2, 3, 4]), # x坐标序列 np.array([1, 1, 1]), # y坐标序列 np.array([1, 1, 1]), # z坐标序列 tube_radius=None, # 关闭默认管状渲染 line_width=2, # 调整线段宽度 color=(0, 0, 1) # 设置蓝色线段,方便区分坐标轴 ) ax1 = mlab.axes(color=(0,0,0), nb_labels=4, extent=[0, 5, 0, 2, 0, 2, ], ) mlab.outline(ax1) mlab.show()
额外说明
- 如果需要绘制离散点而非线段,应使用
mlab.points3d()函数,而非plot3d搭配representation='points'。 - 你对
plot3d的x/y/z坐标数组的设置是正确的,问题仅出在渲染参数上。
内容的提问来源于stack exchange,提问作者Alf
相关产品推荐
相关产品推荐

