Source code for attitude.display.stereonet
import numpy as N
from matplotlib.path import Path
from matplotlib.patches import PathPatch
import mplstereonet.stereonet_math as M
from ..orientation.reconstructed import ReconstructedPlane
from ..stereonet import plane_errors, ellipse, dot, error_ellipse, normal_errors
from ..error.axes import sampling_axes
from ..geom.transform import rotate_2D
[docs]def plot_patch(ax, vertices, codes, **kwargs):
# Make path plot in order with lines
# https://matplotlib.org/examples/pylab_examples/zorder_demo.html
defaults = dict(zorder=2)
defaults.update(kwargs)
path = Path(vertices, codes)
patch = PathPatch(path, **defaults)
ax.add_patch(patch)
[docs]def girdle_error(ax, fit, **kwargs):
"""
Plot an attitude measurement on an `mplstereonet` axes object.
"""
vertices = []
codes = []
for sheet in ('upper','lower'):
err = plane_errors(fit.axes, fit.covariance_matrix,
sheet=sheet)
lonlat = N.array(err)
lonlat *= -1
n = len(lonlat)
if sheet == 'lower':
lonlat = lonlat[::-1]
vertices += list(lonlat)
codes.append(Path.MOVETO)
codes += [Path.LINETO]*(n-1)
plot_patch(ax, vertices, codes, **kwargs)
[docs]def pole_error(ax, fit, **kwargs):
"""
Plot the error to the pole to a plane on a `mplstereonet`
axis object.
"""
ell = normal_errors(fit.axes, fit.covariance_matrix)
lonlat = -N.array(ell)
n = len(lonlat)
codes = [Path.MOVETO]
codes += [Path.LINETO]*(n-1)
vertices = list(lonlat)
plot_patch(ax, vertices, codes, **kwargs)
[docs]def uncertain_plane(ax, *args, **kwargs):
fit = ReconstructedPlane(*args)
return girdle_error(ax, fit, **kwargs)