在Mayavi中绘制具有特定线条颜色的多条线条

时间:2014-01-29 14:58:44

标签: python lines mayavi

我跟着http://docs.enthought.com/mayavi/mayavi/auto/example_plotting_many_lines.html在3D中绘制了多个点对点线。 它有效,但我需要根据一些标量值为每条线着色。

如何在每行的基础上分配这样的标量值?

2 个答案:

答案 0 :(得分:0)

您链接的教程确实使用标量来指定线条颜色(使用“重音”贴图)。在致电mlab.pipeline.scalar_scatter(x,y,z,s)时,标量会进入s

你的意思是什么?

答案 1 :(得分:0)

这是一个解决方法,涉及在每个点出现在边缘时复制每个点和一个副本:

def colorize_edges(points, edge_indices, edge_colors):
    assert points.ndim == 2
    assert points.shape[1] == 3
    assert edge_indices.ndim == 2
    n_edges = edge_indices.shape[0]
    assert edge_indices.shape[1] == 2
    edge_indices = edge_indices.astype(int)
    assert edge_colors.ndim == 1
    assert edge_colors.shape[0] == n_edges
    x, y, z = points[:, 0], points[:, 1], points[:, 2]
    i, j = edge_indices[:, 0], edge_indices[:, 1]
    x = np.hstack([x[i], x[j]])
    y = np.hstack([y[i], y[j]])
    z = np.hstack([z[i], z[j]])
    c = np.hstack([c, c])
    src = mlab.pipeline.scalar_scatter(x, y, z, c)
    connections = np.vstack([i, j+n_edges]).T
    src.mlab_source.dataset.lines = connections
    surf = mlab.pipeline.surface(src, line_width=1.0)
    mlab.show()