MITB Banner

Guide To Mayavi: A Python Tool For Visualizing and Plotting 2D/3D Scientific Data

Share

Mayavi

Mayavi is a cross-platform library and application for 2D and 3D plotting and interactive visualization of scientific data using Python. It leverages the power of Visualization Toolkit (VTK) without requiring the users to have its prior knowledge. It acts as a clean and lucid Python interface that enables plotting complex figures with a few code lines; some of them can even be plotted using one-liners. Besides, it also provides an object-oriented interface for the same purposes.

Highlighting Features of Mayavi

  • It enables visualization of scalar, vector and tensor data in 2D and 3D.
  • It can act as an alteranate to Matlab or Pylab for plotting and visualizing 3D data using NumPy via the mlab module.
  • It can also be used as an interactive application. Read about the usage of Mayavi as an application here.
  • It provides options for various image formats for saving the rendered visualizations.
  • It makes use of the Enthought Tool Suite (ETS).
  • Earlier version of Mayavi was Mayavi1 while its latest version is Mayavi2 which has been designed keeping extensibility and scriptability in mind. Because of its cleaner MVC design, it is also easier to script Mayavi2 than Mayavi1.

How Mayavi works?

Similar to VTK, Mayavi makes use of a pipeline architecture. Data in Mayavi is stored in a ‘data source’, which is nothing but a data file or a data object describing the data to be used for visualization and plotting. This data can be stored in a VTK-supported file format. Alternatively, it can be generated as sequences like NumPy arrays using simple scripting API such as mlab. It is then processed using Filters and can be visualized using various Modules for visualization. Since there can be different ways of visualizing some given data, ‘data source’ and ‘modules’ have been kept as separate sections of the library to visualize different entities from various perspectives by applying different modules to a common data source. The area where visualization is performed in a Mayavi application is termed as a ‘scene’.

Practical implementation

Here’s a demonstration of plotting various 3D figures using easy-to-use built-in functions provided by Mayavi library. The following code implementation referenced the official examples of Mayavi and verified in Google Colab with  Python 3.7.10 and Mayavi 4.7.2 versions. Step-wise explanation of the code is as follows:

  1. Install required dependencies
 !apt-get install vtk6
 !apt-get install python-vtk
 !pip install numpy vtk pyqt5
 ! pip install scipy jupyter ipywidgets ipyevents 
  1. Install Mayavi library

!pip install mayavi

  1. Setup environment for plotting interactive plots 
 !apt-get install -qq xvfb
 import os     #For interacting with the Operating System
 os.system('/usr/bin/Xvfb :99 -screen 0 1024x768x24 &')
 #Define environmental variable using os.environ object
 os.environ['DISPLAY'] = ':99'
 import panel as pn
 pn.extension('vtk') #for interacting with complex 3D geometry 
  1. Import NumPy and Mayavi’s mlab module
 import numpy as np
 from mayavi import mlab 
  1. IMP NOTE: For visualizing Mayavi visualization in Jupyter notebooks, it is required to call init_notebook() method which configures Mayavi objects to be rendered on the notebook. Visit this page of the official documentation, which suggests the way of dealing with Mayavi using Jupyter notebook.

mlab.init_notebook()

On successful execution of the above line of code, we get the following output:

Notebook initialized with ipy backend.

  1. Plot glyphs like points at pre-defined positions using test_points3d() method.

mlab.test_points3d()

Output:

Mayavi op1

  IMP NOTE: After every plot, remember to clear the current figure using mayavi.mlam.clf() method, otherwise the next plot will get overlapped with the current one.

  mlab.clf()

  1. Draw lines joining successive points using plot3d() method

mlab.test_plot3d()

Output:

Mayavi op2
 #Clear the current figure
 mlab.clf() 
  1. Plot arrows showing direction of vectors at specified position using test_quiver3d()

mlab.test_quiver3d()

Output:

Mayavi op3
 #Clear the current figure
 mlab.clf() 
  1. Plot a surface with regularly-spaced elevation using test_surf()

mlab.test_surf()

Output:

Mayavi op4
 #Clear the current figure
 mlab.clf() 
  1. Plot a surface from a mesh formed by joining vertices of a triangle using test_triangular_mesh()

mlab.test_triangular_mesh()

Output:

 #Clear the current figure
 mlab.clf() 
  1. Plot isosurface for 3D data using test_contour3d() method

mlab.test_contour3d()

Output:

 #Clear the current figure
 mlab.clf() 
  1.  Draw histogram-like plots in 3D using test_barchart() method

mlab.test_barchart()

Output:

 #Clear the current figure
 mlab.clf() 
  1. Plot flow of a vector field using test_flow() method

mlab.test_flow()

 #Clear the current figure
 mlab.clf() 
  1. Plot a surface from grid-spaced data using test_mesh()

mlab.test_mesh()

Output:

 #Clear the current figure
 mlab.clf() 
  1. Plot an attractive mesh using fancy_mesh()

mlab.test_fancy_mesh()

Output:

 #Clear the current figure
 mlab.clf() 
  1. Plot a spherical mesh

mlab.test_mesh_sphere()

Output:

 #Clear the current figure
 mlab.clf() 

For more attractive spherical mesh,

mlab.test_mesh_mask_custom_colors()

Output:

 #Clear the current figure
 mlab.clf() 

NOTE: As mentioned in step (6), if mlab.clf() is used to clear current figure, successive plots will get overlapped. This technique can be used to mix two or more 3D plots as in the following step.

  1. Plots of step (7) and (10) can be combined by not specifying mlab.clf() after plotting the triangular mesh as follows:
 mlab.test_triangular_mesh()
 mlab.test_plot3d() 

Output:

 #Clear the current figure
 mlab.clf() 
  1. Plot a z-warped surface representing Julia set
 #Create a muti-dimensional grid using numpy.ogrid()
 x, y = np.ogrid[-1.5:0.5:500j, -1:1:500j]
 #Calculate z-dimension
 z = x + 1j * y
 #Initialize an array representing Julia set with zeros
 julia = np.zeros(z.shape)
 #Compute Julia set
 for i in range(50):
     z = z ** 2 - 0.70176 - 0.3842j
     julia += 1 / float(2 + i) * (z * np.conj(z) > 4)
 # Display the Julia set using surf() method
 mlab.figure(size=(400, 300))
 mlab.surf(julia, colormap='gist_earth', warp_scale='auto', vmax=1.5) 

Output:

IMP NOTE: While executing the Google colab code having multiple Mayavi plots, it is recommended to run the cells manually one-by-one. Allowing the cells to get executed independently by selecting ‘Run all’ or ‘Restart and run all’ option may sometimes result in output plots that do not match the input code since a cell may get executed before the previous figure gets cleared.

References

For an in-depth understanding of the Mayavi library and tutorials for more examples, refer to the following sources:

Share
Picture of Nikita Shiledarbaxi

Nikita Shiledarbaxi

A zealous learner aspiring to advance in the domain of AI/ML. Eager to grasp emerging techniques to get insights from data and hence explore realistic Data Science applications as well.
Related Posts

CORPORATE TRAINING PROGRAMS ON GENERATIVE AI

Generative AI Skilling for Enterprises

Our customized corporate training program on Generative AI provides a unique opportunity to empower, retain, and advance your talent.

Upcoming Large format Conference

May 30 and 31, 2024 | 📍 Bangalore, India

Download the easiest way to
stay informed

Subscribe to The Belamy: Our Weekly Newsletter

Biggest AI stories, delivered to your inbox every week.

AI Courses & Careers

Become a Certified Generative AI Engineer

AI Forum for India

Our Discord Community for AI Ecosystem, In collaboration with NVIDIA. 

Flagship Events

Rising 2024 | DE&I in Tech Summit

April 4 and 5, 2024 | 📍 Hilton Convention Center, Manyata Tech Park, Bangalore

MachineCon GCC Summit 2024

June 28 2024 | 📍Bangalore, India

MachineCon USA 2024

26 July 2024 | 583 Park Avenue, New York

Cypher India 2024

September 25-27, 2024 | 📍Bangalore, India

Cypher USA 2024

Nov 21-22 2024 | 📍Santa Clara Convention Center, California, USA

Data Engineering Summit 2024

May 30 and 31, 2024 | 📍 Bangalore, India

Subscribe to Our Newsletter

The Belamy, our weekly Newsletter is a rage. Just enter your email below.