缩放Mayavi散点图

3 投票
1 回答
2895 浏览
提问于 2025-04-17 20:44

我正在尝试在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)]) 

撰写回答