Source code for openquake.sub.misc.utils_plot

"""
:module:`openquake.sub.tests.misc.plot_utils`
"""

import numpy as np

try:
    from mayavi import mlab
    MAYAVI = True
except:
    MAYAVI = False


[docs] def plotter(profiles, smsh): """ Mesh and profiles plotter. :param profiles: A list of :class:`openquake.hazardlib.geo.line.Line` instances :param smsh: A :class:`numpy.ndarray` instance """ # if MAYAVI: _ = mlab.figure(size=(600, 400)) # scl = -0.01 delta = 0.1 wdt = 0.001 # initialize extremes xmi = +1e10 ymi = +1e10 zmi = +1e10 xma = -1e10 yma = -1e10 zma = -1e10 # plotting profiles for l in profiles: coo = [[p.longitude, p.latitude, p.depth*scl] for p in l] coo = np.array(coo) mlab.plot3d(coo[:, 0], coo[:, 1], coo[:, 2], color=(0, 1, 0), line_width=wdt, opacity=0.2) mlab.points3d(coo[0, 0], coo[0, 1], coo[0, 2], color=(1., 0.5, 0.), line_width=wdt, scale_factor=0.1) xmi = min(xmi, np.amin(coo[:, 0]) - delta) xma = max(xma, np.amax(coo[:, 0]) + delta) ymi = min(ymi, np.amin(coo[:, 1]) - delta) yma = max(yma, np.amax(coo[:, 1]) + delta) zmi = min(zmi, np.amin(coo[:, 2]) - delta) zma = max(zma, np.amax(coo[:, 2]) + delta) # plotting mesh smsh[:, :, 2] *= scl for i in range(smsh.shape[0]): k = np.isfinite(smsh[i, :, 0]) if np.any(k): _ = mlab.plot3d(smsh[i, k, 0], smsh[i, k, 1], smsh[i, k, 2], color=(1, 0, 0), line_width=wdt, tube_radius=0.01) for i in range(smsh.shape[1]): k = np.isfinite(smsh[:, i, 0]) if sum(k): _ = mlab.plot3d(smsh[k, i, 0], smsh[k, i, 1], smsh[k, i, 2], color=(1, 0, 0), line_width=wdt, tube_radius=0.01) # decoration axes = mlab.axes(extent=[xmi, xma, ymi, yma, zmi, zma]) axes.label_text_property.font_size = 6 axes.axes.font_factor = 1.0 mlab.xlabel('Longitude\n') mlab.ylabel('Latitude\n') mlab.zlabel('Depth\n [km*0.01]') mlab.show()