缩放Mayavi散点图
我正在尝试在mayavi中制作一个3D散点图。不过,我输入的数据的尺度差别很大。下面是一个测试示例:
x = np.linspace(0, 1, 100)
y = np.linspace(0, 100, 100)
x, y = np.meshgrid(x,y)
x = [xi for xj in x for xi in xj]
y = [yi for yj in y for yi in yj]
z = [random.randint(0,10)/10.0 for i in range(10000)]
from mayavi import mlab
s = mlab.points3d(x, y, z, scale_factor = 0.1)
mlab.show()
现在,输出的图看起来几乎像一条线,因为y
轴的范围相比其他轴要长很多。我该如何调整这个图,让它看起来更容易理解,使得各个轴的范围更能比较呢?
1 个回答
5
我用extent
参数以一种意想不到的方式搞定了这个问题:
s = mlab.points3d(x, y, z, mode = 'point', extent = [0,1,0,1,0,1])
显然,在mayavi中,坐标并不是我们通常理解的“绘图”坐标,它们实际上是在窗口中定义你的3D对象的位置。extent
参数的作用就是把整个对象按extent
的值进行缩放。如果这些值都设置成一样的,你就会得到一个正方形的图形。问题是,如果你用的是球体,它们也会被缩放,变成椭球体。这就是为什么我在这里选择使用mode = 'point'
的原因。
要添加带有正确标记的坐标轴,你需要添加以下内容:
mlab.axes(s, ranges = [min(x), max(x), min(y), max(y), min(z), max(z)])