Search code examples
mayavigraph-visualization

Mayavi doesn't draw lines


I want to draw very simple graph with 4 nodes and 3 edges:

    from numpy import array, vstack
    from mayavi import mlab

    mlab.figure(1, bgcolor=(1, 0.9, 1))
    mlab.clf()
    x = array([0, 3, 2, 3])
    y = array([0, 4, 5, 1])
    z = array([0, 0, 1, 1])
    color = array([0.1, 0.3, 0.5, 0.7])

    pts = mlab.points3d(x, y, z,
                        color,
                        scale_factor=1,
                        scale_mode='none',
                        colormap='Blues',
                        resolution=20)

    edges = vstack([[0, 1], [0, 2], [0, 3]])
    pts.mlab_source.dataset.lines = edges
    tube = mlab.pipeline.tube(pts, tube_radius=0.1, tube_sides=7)
    mlab.pipeline.surface(tube, color=(0.8, 0.8, 0.8))
    mlab.show()

It returns that: mayavi graph fail

Why edges are missing?


Solution

  • There is a bug in Mayavi about this. It is related to unsynchronized changes with VTK and are thus a bit hard to pinpoint. There is a discussion on Mayavi's GitHub https://github.com/enthought/mayavi/issues/388

    The bug also shows up with the protein.py example that comes up with Mayavi and it is fixed there by adding

    pts.mlab_source.update()
    

    after setting the lines. It is fixed online for the example at https://github.com/enthought/mayavi/commit/afb17fceafe787c8260ca7a37fbb3b8c2fbfd36c

    Using the fix did not work for me though but you might try.