Evan Bianco of Agile Geoscience wrote a wonderful post on how to use python to import, manipulate, and display digital elevation data for Mt St Helens before and after the infamous 1980 eruption. He also calculated the difference between the two surfaces to calculate the volume that was lost because of the eruption to further showcase Python’s capabilities. I encourage readers to go through the extended version of the exercise by downloading his iPython Notebook and the two data files here and here.
I particularly like Evan’s final visualization (consisting of stacked before eruption, difference, and after eruption surfaces) which he created in Mayavi, a 3D data visualization module for Python. So much so that I am going to piggy back on his work, and show how to import a custom palette in Mayavi, and use it to color one of the surfaces.
import numpy as np # load 256 RGB triplets in 0-1 range: LinL = np.loadtxt('Linear_L_0-1.txt') # create r, g, and b 1D arrays: r=LinL[:,0] g=LinL[:,1] b=LinL[:,2] # create R,G,B, and ALPHA 256*4 array in 0-255 range: r255=np.array([floor(255*x) for x in r],dtype=np.int) g255=np.array([floor(255*x) for x in g],dtype=np.int) b255=np.array([floor(255*x) for x in b],dtype=np.int) a255=np.ones((256), dtype=np.int); a255 *= 255; RGBA255=zip(r255,g255,b255,a255)
This code block imports the palette into Mayavi and uses it to color the Mt St Helens after the eruption surface. You will need to have run part of Evan’s code to get the data.
from mayavi import mlab # create a figure with white background mlab.figure(bgcolor=(1, 1, 1)) # create surface and passes it to variable surf surf=mlab.surf(after, warp_scale=0.2) # import palette surf.module_manager.scalar_lut_manager.lut.table = RGBA255 # push updates to the figure mlab.draw() mlab.show()
Mayavi custom colormap example