Anda di halaman 1dari 26

Introduction to Stereonet

A Mathematica package for visualizing, analyzing, and simulating orientation data in structural geology and rock engineering William C. Haneberg www.haneberg.com bill@haneberg.com
Version 0.9 Draft of 16 June 2011
Copyright 2011 William C. Haneberg

Introduction
Stereonet is a Mathematica package containing functions useful for visualizing, analyzing, and simulating orientation data in structural geology and rock engineering, as well as other fieldsfor example, sedimentology and glaciologyin which fabric or orientation data are of interest. If you're used to a stand-alone stereonet computer programs available, and there are many good examples out there, the first thing you'll notice is that Stereonet is much different. Traditional stereonet programs might include many features, but in the end they limit what users can do. While that might suffice if the program does exactly what you want, it hinders geologists who want to do anything else. For example, features that the author hadn't considered or had considered but rejected for one reason or another. Stereonet, on the other hand, is more like a box full of building blocks or components that provide much more freedom and flexibility. It is completely extensible, so you can use Stereonet functions within your own Mathematica functions, modify them to suit your needs, or write your own mini-applications to solve specific problems. Likewise, you can combine the Stereonet functions with the many hundreds of standard Mathematica functions to solve just about any structural geology orientation problem that you might encounter. This Mathematica notebook is a brief introduction to the potential of Stereonet, ranging from installation and data import to more sophisticated topics like outlier detection, cluster analysis, and creation of interactive mini-applications. It is by no means exhaustive, so work through the examples and use them as a foundation for your own work. There's also a short bibliography at the end. It's by no means exhaustive, but provides a good place to start learning about the principles of spherical statistics and orientation analysis in structural geology. This introduction assumes a basic working knowledge of the applications of lower hemisphere projections in structural geology. IMPORTANT: Stereonet is provided free of charge and without warranty of any kind. Use it at your own risk and be sure to critically evaluate any results before using them in professional practice or research. You may redistribute it freely provided that the source and author are attributed, but may not sell, rent, or otherwise charge for copies of the entire package or portions of it.

StereonetIntroduction.nb

Using Mathematica
This introduction assumes that you have a copy and basic working knowledge of Mathematica. It's vast and powerful general purpose package for virtually anything vaguely mathematical, including numercial and symbolic manipulation, statistical analysis, and graphics. What's more, Mathematica is completely programmable. If you're not already familiar with Mathematica syntax and the notebook metaphor, take some time to get comfortable with it before trying to use Stereonet. If you're looking for an introduction to Mathematica with a geological twist, I recomment Computational Geosciences with Mathematica (Haneberg, 2004). Some of the sections are dated, particularly those involving graphics, but it's still a useful introduction to basic Mathematica commands and syntax.

Installing and Initializing Stereonet


Mathematica packages consist of text files containing functions to supplement those built into the software. Packages must be read in separately, but you can configure Mathematica to automatically read and initialize packages that you use often. You need to place the Stereonet file someplace where Mathematica can find it. The easiest way to do that is to execute the command
In[1]:= Out[1]=

$Path Applications Mathematica_7 Mathematica.app SystemFiles Links, Users bill Library Mathematica Kernel, Users bill Library Mathematica Autoload, Users bill Library Mathematica Applications, Library Mathematica Kernel, Library Mathematica Autoload, Library Mathematica Applications, ., Users bill, Applications Mathematica_7 Mathematica.app AddOns Packages, Applications Mathematica_7 Mathematica.app AddOns LegacyPackages, Applications Mathematica_7 Mathematica.app SystemFiles Autoload, Applications Mathematica_7 Mathematica.app AddOns Autoload, Applications Mathematica_7 Mathematica.app AddOns Applications, Applications Mathematica_7 Mathematica.app AddOns ExtraPackages, Applications Mathematica_7 Mathematica.app SystemFiles Kernel Packages, Applications Mathematica_7 Mathematica.app Documentation English System

This produces the default file path that Mathematica, at least as it's installed on my computer, follows to look for things. Your results might be slightly different. The important thing is that you copy the Stereonet file to one of the listed directories. Depending on your operating system, you may or may not need administrator privileges to access some of the directories. Likewise, if you install it in, say, a directory along the /User... path, the package may not be accessible to other users of your computer. You can also add file paths, but should refer to the standard Mathematica documentation if you want to do that. Once you've place the Stereonet file in a suitable directory, make it available using Needs
In[59]:=

Needs "Stereonet`"

Now, you're ready to get some data and start plotting.

Getting Help
This introduction will include many of the functions included in Stereonet. If you know the name of the Stereonet function you want to use, let's say ListEqualAreaPointPlot, then you can see the syntax using

StereonetIntroduction.nb

In[3]:=

? ListEqualAreaPointPlot

ListEqualAreaPointPlot data, pointsize, options creates a lower hemisphere equal area projection of vector data, which must be a list of dip angles and dip directions or plunges and azimuths for lineations . It is not necessary to specify point size unless graphics options are used, in which case the point size must be given. Graphics options can be used to specify point colors, sizes, edge styles, etc.

Even if you don't know the full name, you can start typing it and then use Cntrl-k to autocomplete the word. Future versions of Stereonet may include a graphical palette to help select frequently used functions. There is a complete list of Stereonet functions at the end of this introduction. If you like to dig around in computer code, you can also gain some insight by opening the Stereonet file in a text editor, working your way through the functions, and maybe even modifying them to suit your needs. If you do that, though, save a backup copy BEFORE you start editing!

Data Import
There are basically two ways to get the data you need into Mathematica. First, you can manually enter it, which isn't too difficult if there are only a few data. Mathematica likes lists, and tables of data (say, dip angles and dip directions) are treated as lists of lists. Here's what a small data set might look like if entered by hand:
In[4]:= Out[4]=

mydata

28, 045 , 33, 044 , 30, 043 , 26, 044 , 33, 042 , 34, 045

28, 45 , 33, 44 , 30, 43 , 26, 44 , 33, 42 , 34, 45

Each doublet is a dip angle and dip direction pair (or, if you have lineation data, a plunge and azimuth pair). To avoid confusing dip angles (or plunges) and dip directions (or azimuths), I make it a practice to always denote dip angles with two digits even if it means adding a leading zero (for example, 05) and dip directions with three digits (for example, 045). The second way to get data into Mathematica is to import it from an external file. I like to use text files, but Mathematica can Import a wide range of formats including Excel spreadsheet (xls) files. Here's an example using a text file (data.txt) of dip vectors on my laptop. If you're running the executable Mathematica notebook of this introduction, you'll want to change the file path so that it goes to the location of the stereodata.txt file on your computer.

StereonetIntroduction.nb

In[5]:= Out[5]=

data

Import " Users bill Documents Mathematica Notebooks stereodata.txt", "Table" 62.8382, 148.475 , 46.1772, 126.336 , 47.6193, 143.345 , 59.9836, 158.994 , 55.7423, 126.205 , 56.6758, 140.118 , 55.3017, 143.385 , 55.7114, 139.444 , 45.2786, 133.417 , 57.5523, 125.4 , 47.778, 143.089 , 52.8973, 152.996 , 42.7068, 142.031 , 47.9308, 152.049 , 51.297, 38.1217 , 42.3242, 18.5187 , 51.4065, 16.6529 , 51.7594, 19.5685 , 53.9745, 23.8949 , 33.648, 29.1232 , 30.9367, 3.56971 , 48.8551, 25.5334 , 37.1799, 16.0565 , 35.2105, 26.6289 , 39.3074, 31.3755 , 54.7344, 16.5241 , 47.3002, 23.9714 , 34.4981, 18.4568 , 29.0657, 13.9306 , 33.1171, 25.9041 , 55.3137, 24.5196 , 51.0974, 26.2351 , 46.3956, 25.6004 , 39.9912, 39.3676 , 58.2202, 18.0546 , 52.2297, 9.92212 , 46.3156, 21.9342 , 51.6604, 27.8662 , 52.9298, 20.4086 , 36.8393, 307.551 , 41.0221, 285.31 , 36.1901, 277.304 , 42.8285, 291.681 , 36.058, 286.855 , 35.6246, 283.005 , 33.145, 298.022 , 32.8289, 281.052 , 42.305, 291.818 , 43.8851, 293.76 , 43.205, 308.804 , 34.0575, 286.113 , 64.8775, 130.611 , 35.3035, 75.8745 , 24.5077, 265.755 , 69.7674, 292.13 , 20.8657, 144.317 , 81.0053, 178.115 , 17.0744, 80.9235 , 29.1742, 234.145 , 55.9657, 194.139

48.5633, 133.768 , 58.5452, 164.238 , 47.565, 135.096 , 48.6889, 149.024 , 52.9731, 134.995 , 51.8125, 152.895 , 53.5388, 14.0104 , 46.9946, 24.8077 , 49.2899, 27.0795 , 39.2301, 49.7843 , 34.9017, 27.2546 , 56.5569, 36.1743 , 41.2004, 32.3076 , 49.9795, 27.7572 , 36.8014, 301.915 , 39.7966, 292.347 , 40.3895, 294.576 , 37.2788, 287.011 , 26.6166, 297.036 , 41.5129, 18.189 , 38.8833, 279.811 ,

You can avoid typing the long file path by using the Insert File Path... pulldown menu item, which will bring up a dialog box that allows you to pick the file you want and then inserts that name following the cursor. Mathematica automatically recognizes any file with a .dat suffix as a table of data, but I've found that the .dat suffix can conflict with other file types. So, if you use a .txt suffix then also include the "Table" declaration to explicitly tell Mathematica what kind of data structure to expect. If the data file you're importing has headers or more information than just dip angle and dip direction, you can use the list manipulation capabilities of Mathematica to pull out whatever you need.

Basic Plots
Stereonet has functions for two basic types of equal area or stereographic projections: points and arcs. Point plots are for vector data (including dip vectors and poles to planes, which allow planes to be represented as vectors or, when they intersect the lower hemisphere, simply points). Arc, or great circle, plots are for planar data. Here's the simplest possible point plot of the example data:

StereonetIntroduction.nb

In[6]:=

ListEqualAreaPointPlot data
0

Out[6]=

270

90

180

Function names in Stereonet correspond largely to the style of standard Mathematica function names. For example, ListEqualAreaPointPlot was chosen because it has the same etymology as such standard Mathematica functions as ListPlot, ListPointPlot, ListPlot3D, and so forth The simple approach works, but there's also a lot that can be done to improve its looks. For example, coloring or adjusting the opacity of points using Mathematica graphics options. Note that while it isn't necessary to specify a point size if you use the simple implementation above, it is if you're going to add graphics options. We'll use a relative point size of 0.02 and make the points translucent red with black edges to illustrate some of the flexibility of Stereonet. Refer to the Mathematica documentation for more information about graphics options in general, and then experiment with some obvious variations like changing the color or point size.

StereonetIntroduction.nb

In[7]:=

ListEqualAreaPointPlot data, 0.02, Style


0

Red, Opacity 0.5 , EdgeForm Black

Out[7]=

270

90

180

Stereonet also includes a polar mesh that can help to visualize the data. It doesn't do much on its own, but can easily be combined with existing plots like this (where the % is Mathematica shorthand for the previous output line):
In[8]:=

Show EqualAreaMesh

,
0

Out[8]=

270

90

180

Likewise, it's a simple matter to make a basic arc plot (although one quirk is that you must specify graphics options for arc plots because there's no default style).

StereonetIntroduction.nb

In[9]:=

ListEqualAreaArcPlot data, Style


0

Thick, Blue

Out[9]=

270

90

180

Here is where the real flexibility of this approach becomes evident: the previous two plots can be combined in a few keystrokes to illustrate both the dip vectors and the great circles for all of the planes in data.
In[10]:=

Show

,
0

Out[10]=

270

90

180

It's also easy to convert between dip vectors and poles, using DiplineToPole and the Mathematica function Map.

StereonetIntroduction.nb

In[11]:= Out[11]=

poles

Map DiplineToPole, data 27.1618, 328.475 , 43.8228, 306.336 , 42.3807, 323.345 , 30.0164, 338.994 , 34.2577, 306.205 , 33.3242, 320.118 , 34.6983, 323.385 , 34.2886, 319.444 , 44.7214, 313.417 , 32.4477, 305.4 , 42.222, 323.089 , 37.1027, 332.996 , 47.2932, 322.031 , 42.0692, 332.049 , 38.703, 218.122 , 47.6758, 198.519 , 38.5935, 196.653 , 38.2406, 199.568 , 36.0255, 203.895 , 56.352, 209.123 , 59.0633, 183.57 , 41.1449, 205.533 , 52.8201, 196.057 , 54.7895, 206.629 , 50.6926, 211.375 , 35.2656, 196.524 , 42.6998, 203.971 , 55.5019, 198.457 , 60.9343, 193.931 , 56.8829, 205.904 , 34.6863, 204.52 , 38.9026, 206.235 , 43.6044, 205.6 , 50.0088, 219.368 , 31.7798, 198.055 , 37.7703, 189.922 , 43.6844, 201.934 , 38.3396, 207.866 , 37.0702, 200.409 , 53.1607, 127.551 , 48.9779, 105.31 , 53.8099, 97.3036 , 47.1715, 111.681 , 53.942, 106.855 , 54.3754, 103.005 , 56.855, 118.022 , 57.1711, 101.052 , 47.695, 111.818 , 46.1149, 113.76 , 46.795, 128.804 , 55.9425, 106.113 , 25.1225, 310.611 , 54.6965, 255.874 , 65.4923, 85.7552 , 20.2326, 112.13 , 69.1343, 324.317 , 8.99474, 358.115 , 72.9256, 260.923 , 60.8258, 54.1449 , 34.0343, 14.1389 Purple, Opacity 0.5 , EdgeForm Black

41.4367, 313.768 , 31.4548, 344.238 , 42.435, 315.096 , 41.3111, 329.024 , 37.0269, 314.995 , 38.1875, 332.895 , 36.4612, 194.01 , 43.0054, 204.808 , 40.7101, 207.079 , 50.7699, 229.784 , 55.0983, 207.255 , 33.4431, 216.174 , 48.7996, 212.308 , 40.0205, 207.757 , 53.1986, 121.915 , 50.2034, 112.347 , 49.6105, 114.576 , 52.7212, 107.011 , 63.3834, 117.036 , 48.4871, 198.189 , 51.1167, 99.811 ,

In[12]:=

ListEqualAreaPointPlot poles, 0.02, Style


0

Out[12]=

270

90

180

Poles can be converted back to their dip vectors using PoleToDipline

StereonetIntroduction.nb

In[13]:= Out[13]=

Map PoleToDipline, poles 48.5633, 133.768 , 58.5452, 164.238 , 47.565, 135.096 , 48.6889, 149.024 , 52.9731, 134.995 , 51.8125, 152.895 , 53.5388, 14.0104 , 46.9946, 24.8077 , 49.2899, 27.0795 , 39.2301, 49.7843 , 34.9017, 27.2546 , 56.5569, 36.1743 , 41.2004, 32.3076 , 49.9795, 27.7572 , 36.8014, 301.915 , 39.7966, 292.347 , 40.3895, 294.576 , 37.2788, 287.011 , 26.6166, 297.036 , 41.5129, 18.189 , 38.8833, 279.811 , 62.8382, 148.475 , 46.1772, 126.336 , 47.6193, 143.345 , 59.9836, 158.994 , 55.7423, 126.205 , 56.6758, 140.118 , 55.3017, 143.385 , 55.7114, 139.444 , 45.2786, 133.417 , 57.5523, 125.4 , 47.778, 143.089 , 52.8973, 152.996 , 42.7068, 142.031 , 47.9308, 152.049 , 51.297, 38.1217 , 42.3242, 18.5187 , 51.4065, 16.6529 , 51.7594, 19.5685 , 53.9745, 23.8949 , 33.648, 29.1232 , 30.9367, 3.56971 , 48.8551, 25.5334 , 37.1799, 16.0565 , 35.2105, 26.6289 , 39.3074, 31.3755 , 54.7344, 16.5241 , 47.3002, 23.9714 , 34.4981, 18.4568 , 29.0657, 13.9306 , 33.1171, 25.9041 , 55.3137, 24.5196 , 51.0974, 26.2351 , 46.3956, 25.6004 , 39.9912, 39.3676 , 58.2202, 18.0546 , 52.2297, 9.92212 , 46.3156, 21.9342 , 51.6604, 27.8662 , 52.9298, 20.4086 , 36.8393, 307.551 , 41.0221, 285.31 , 36.1901, 277.304 , 42.8285, 291.681 , 36.058, 286.855 , 35.6246, 283.005 , 33.145, 298.022 , 32.8289, 281.052 , 42.305, 291.818 , 43.8851, 293.76 , 43.205, 308.804 , 34.0575, 286.113 , 64.8775, 130.611 , 35.3035, 75.8745 , 24.5077, 265.755 , 69.7674, 292.13 , 20.8657, 144.317 , 81.0053, 178.115 , 17.0744, 80.9235 , 29.1742, 234.145 , 55.9657, 194.139

Mathematica has sophisticated comparison capabilities, so the fact that PoleToDipline worked correctly can be verified by testing whether the result (using the Mathematica shorthand symbol % for the previous output line) is logically equal to data using the == operator.
In[14]:= Out[14]=

data True

Stereographic Projections
Stereonet also includes the functions ListStereoPointPlot and ListStereoArcPlot for plotting lower hemisphere stereographic, rather than equal area, projections. Their syntax is identical to the corresponding equal area functions.

Contouring
Contouring the density of dip vectors or poles is one of the most common ways to visualize real (i.e., noisy) data, and Stereonet offers two options: The traditional approach using a counting circle and contour interval of essentially arbitrary size (the standard is generall 1% of the projection area) and magnitude. As implemented in Stereonet, however, both the counting circle size and contour interval are user specified. Additionally, the user can specify
the order of the polynomial used to interpolate the surface that is actually contoured (the default value is linear interpolation). Kamb's method in which the counting circle size and contour interval are statistically determined and will vary from data set to data set.

Here's a simple illustration, again using data, with the traditional 1% counting circle area, 5% contour interval, and linear interpolation:

10

StereonetIntroduction.nb

In[15]:=

ListEqualAreaContourPlot data, 0.01, 0.05


0

Out[15]=

270

90

180

Although the contour lines are not labeled, holding the cursor over a contour line will cause its value to appear. Cubic interpolation produces smoother contours:
In[16]:=

ListEqualAreaContourPlot data, 0.01, 0.05, InterpolationOrder


0

Out[16]=

270

90

180

Interpolation orders can be can be any integer 1, 2, 3... (although values greater than 3 are likely to cause problems) or None. The traditional 1% counting circle area isn't justified statistically unless sample sizes are very large (many hundreds of points. Pollard and Fletcher (2005) and Kamb (1959) discuss the reasons in detail; we'll illustrate using an example. If the counting circle area and contour interval are both changed to 5%, the plot shows definitely two and maybe three clusters or sets:

StereonetIntroduction.nb

11

In[17]:=

ListEqualAreaContourPlot data, 0.05, 0.05, InterpolationOrder


0

Out[17]=

270

90

180

Notice that some of the maxima in the first plot disappear when the counting circle area is increased, suggesting that they were spurious rather than real concentrations of dip vectors. The contour interval is changed correspondingly, as well, because the value being contoured is the percentage of data points falling within the counting circle. As the counting circle area increases, so does the percentage of points falling within it; thus, a larger contour interval is useful. Filled contours can be distracting if they are combined with the individual data points, and can be removed using the standard ContourShading option for Mathematica contour plots.
In[18]:=

ListEqualAreaContourPlot data, 0.05, 0.05, InterpolationOrder


0

3, ContourShading

False

Out[18]=

270

90

180

As before, Show can be used to build up composite plots like the dip vector points superimposed on the contours.

12

StereonetIntroduction.nb

In[19]:=

Show ListEqualAreaContourPlot data, 0.05, 0.05, InterpolationOrder 3, ContourShading ListEqualAreaPointPlot data, 0.02, Style Red, Opacity 0.5 , EdgeForm Black
0

False ,

Out[19]=

270

90

180

Note that the individual dip vector clusters don't coincide exactly the the contour maxima, although they should always be close. There are three reasons for that. First, the data are relatively sparse. Second, it's not the actual dip vectors that are being contoured, but instead their spatial density as measured on a counting circle grid (Stereonet calculates the values on a 20 20 grid, but you're welcome to change that if it suits you). Thus, the visual center of a given cluster might not correspond exactly to a counting circle grid point. Third, the contouring is done by interpolating a surface between all of the counting circle grid points. That's not to say that contouring dip vector or pole concentrations isn't a good thing to do, just that it's a process full of assumptions and approximations and its important to understand how all of them affect the final results. By way of comparison, here is a Kamb-contoured plot of the same data. The counting circle area is based on the number of points (in this case n = 38) and a statistical assessment of the number of points that one might expect to find in a given area if they were randomly distributed (see Kamb, 1959, for details). In this case, the counting circle area is 19%. Contours are specified in terms of the standard deviation of the data, . Because they are calculated, rather than user-specified, this function returns information about the counting circle area and data statistics.
In[20]:=

ListKambPlot data, 2, InterpolationOrder

StereonetIntroduction.nb

13

N A CI

81 0.1 25.4469 4.17762 2


0

Out[20]=

270

90

180

This is a good time to introduce another capability of Mathematica: real time manipulation of functions and plots. Here is a short mini-application with sliders to vary both the counting circle area (A) and the contour interval (CI) to illustrate to simply changing either of those two values can change the appearance of the contour plot.

14

StereonetIntroduction.nb

In[21]:=

ListEqualAreaPointPlot data, 0.02, Style


0

Red, Opacity 0.5 , EdgeForm Black

Out[21]=

270

90

180

In[22]:=

StereonetIntroduction.nb

15

In[23]:=

Manipulate Show ListEqualAreaContourPlot data, A, CI, InterpolationOrder 3, ContourShading False , ListEqualAreaPointPlot data, 0.02, Style Red, Opacity 0.5 , EdgeForm Black , A, 0.05 , 0.01, 0.25, Appearance "Labeled" , CI, 0.05 , 0.01, 0.25, Appearance "Labeled"

A CI

0.05 0.05

Out[23]=

270

90

180

Outlier Removal
It can often be desirable to remove stray pointsoutliersbefore analyzing data. Regardless of the data type, this must always be done with caution and geologic insight about the possible signifiicance of the points being removed. In structural geology or rock engineering, it might be justifiable to remove random non-systematic joint orientations when there is clear evidence that they are insignificant compared to more strongly developed systematic joint sets. On the other hand, apparent outliers may actually be valid members of significant joint sets that are under-represented because of inaccessibility, outcrop or borehole sampling bias, or other factors. For example, a set may contain a only a few joints but if they are very persistent or favorably oriented with respect to the prevailing state of stress, they may exert an influence on mechanical behavior of fluid flow that is disproportionate to their numbers. Outliers can be removed by manual editing, although that process is tedious and subjective. Stereonet includes an implementation of the objective probabilistic method proposed by Mahtab and Yegulalp (1982), also described in Priest (1993), which uses a user-specified angular radius to remove outliers if it appears that they do not have enough nearby neighbors to be part of a cluster or set. Here is how it might be applied to the example data set:

16

StereonetIntroduction.nb

In[24]:= Out[24]=

filtered

OutlierRemoval data, 20 62.8382, 148.475 , 59.9836, 158.994 , 55.3017, 143.385 , 52.9731, 134.995 , 51.8125, 152.895 , 53.5388, 14.0104 , 46.9946, 24.8077 , 48.8551, 25.5334 , 39.3074, 31.3755 , 34.4981, 18.4568 , 55.3137, 24.5196 , 39.9912, 39.3676 , 46.3156, 21.9342 , 36.8393, 307.551 , 42.8285, 291.681 , 33.145, 298.022 , 43.8851, 293.76 , 64.8775, 130.611 , 46.1772, 126.336 , 58.5452, 164.238 , 47.565, 135.096 , 55.7423, 126.205 , 48.6889, 149.024 , 55.7114, 139.444 , 57.5523, 125.4 , 47.778, 143.089 , 42.7068, 142.031 , 47.9308, 152.049 , 42.3242, 18.5187 , 51.4065, 16.6529 , 53.9745, 23.8949 , 33.648, 29.1232 , 37.1799, 16.0565 , 35.2105, 26.6289 , 54.7344, 16.5241 , 47.3002, 23.9714 , 29.0657, 13.9306 , 33.1171, 25.9041 , 51.0974, 26.2351 , 46.3956, 25.6004 , 58.2202, 18.0546 , 52.2297, 9.92212 , 51.6604, 27.8662 , 52.9298, 20.4086 , 41.0221, 285.31 , 36.1901, 277.304 , 36.058, 286.855 , 35.6246, 283.005 , 32.8289, 281.052 , 42.305, 291.818 , 43.205, 308.804 , 34.0575, 286.113 , 41.5129, 18.189 , 38.8833, 279.811

48.5633, 133.768 , 47.6193, 143.345 , 56.6758, 140.118 , 45.2786, 133.417 , 52.8973, 152.996 , 51.297, 38.1217 , 51.7594, 19.5685 , 49.2899, 27.0795 , 39.2301, 49.7843 , 34.9017, 27.2546 , 56.5569, 36.1743 , 41.2004, 32.3076 , 49.9795, 27.7572 , 36.8014, 301.915 , 39.7966, 292.347 , 40.3895, 294.576 , 37.2788, 287.011 , 26.6166, 297.036 ,

In that form, the results are not very insightful. However, it is good to have them available. The easiest way to see the effect is to plot them along with the original data. The following statements make two plots (showing neither, because the semi-colon supresses Mathematica output) and then uses Show to combine them. In this case, the original data are the small red circles and the filtered data are the larger blue circles.
In[25]:=

ListEqualAreaPointPlot data, 0.02, Style Red, Opacity 0.5 , EdgeForm Black ; ListEqualAreaPointPlot filtered, 0.04, Style Blue, Opacity 0.5 , EdgeForm Black Show ,
0

Out[27]=

270

90

180

If the degree of filtering appears too strong, the angular radius can be increased to loosen the criterion for determining whether a point is a member of a cluster. Here are the results for a 30 radius:

StereonetIntroduction.nb

17

In[28]:=

filtered2 OutlierRemoval data, 30 ; ListEqualAreaPointPlot data, 0.02, Style Red, Opacity 0.5 , EdgeForm Black ; ListEqualAreaPointPlot filtered2, 0.04, Style Green, Opacity 0.5 , EdgeForm Black Show ,
0

Out[31]=

270

90

180

Cluster Delineation
Stereonet includes a clustering function that is an angular adaptation of the standard Mathematica function FindClusters, in which the distance metric used to group clusters is the angle between each pair of vectors, taking into account the fact that when only one hemisphere is used the data can be wrapped from one hemisphere to the other. The clustering algorithms can be used on either dip vectors or poles, as the situation dictates.
In[32]:= Out[32]=

clusters

FindDiplineClusters data

48.5633, 133.768 , 62.8382, 148.475 , 46.1772, 126.336 , 58.5452, 164.238 , 47.6193, 143.345 , 59.9836, 158.994 , 47.565, 135.096 , 55.7423, 126.205 , 56.6758, 140.118 , 55.3017, 143.385 , 48.6889, 149.024 , 55.7114, 139.444 , 45.2786, 133.417 , 52.9731, 134.995 , 57.5523, 125.4 , 47.778, 143.089 , 52.8973, 152.996 , 51.8125, 152.895 , 42.7068, 142.031 , 47.9308, 152.049 , 64.8775, 130.611 , 20.8657, 144.317 , 81.0053, 178.115 , 55.9657, 194.139 , 51.297, 38.1217 , 53.5388, 14.0104 , 42.3242, 18.5187 , 51.4065, 16.6529 , 51.7594, 19.5685 , 46.9946, 24.8077 , 53.9745, 23.8949 , 33.648, 29.1232 , 30.9367, 3.56971 , 49.2899, 27.0795 , 48.8551, 25.5334 , 37.1799, 16.0565 , 35.2105, 26.6289 , 39.2301, 49.7843 , 39.3074, 31.3755 , 54.7344, 16.5241 , 47.3002, 23.9714 , 34.9017, 27.2546 , 34.4981, 18.4568 , 29.0657, 13.9306 , 33.1171, 25.9041 , 56.5569, 36.1743 , 55.3137, 24.5196 , 51.0974, 26.2351 , 46.3956, 25.6004 , 41.2004, 32.3076 , 39.9912, 39.3676 , 58.2202, 18.0546 , 52.2297, 9.92212 , 49.9795, 27.7572 , 46.3156, 21.9342 , 51.6604, 27.8662 , 52.9298, 20.4086 , 35.3035, 75.8745 , 41.5129, 18.189 , 17.0744, 80.9235 , 36.8014, 301.915 , 36.8393, 307.551 , 41.0221, 285.31 , 36.1901, 277.304 , 39.7966, 292.347 , 42.8285, 291.681 , 36.058, 286.855 , 35.6246, 283.005 , 40.3895, 294.576 , 33.145, 298.022 , 32.8289, 281.052 , 42.305, 291.818 , 37.2788, 287.011 , 43.8851, 293.76 , 43.205, 308.804 , 34.0575, 286.113 , 26.6166, 297.036 , 24.5077, 265.755 , 69.7674, 292.13 , 38.8833, 279.811 , 29.1742, 234.145

Mathematica automatically decides that the best solution is to have 3 clusters, but that can be hard to see. So, use Length to see how many lists are included in clusters

18

StereonetIntroduction.nb

Mathematica automatically decides that the best solution is to have 3 clusters, but that can be hard to see. So, use Length to see how many lists are included in clusters
In[33]:= Out[33]=

Length clusters 3

Stereonet has a function specifically for plotting the output of FindDiplineClusters (it will also work on data that you group or cluster in other ways, as long as it has the same format). Here are the results, in this case demonstrated using a nested series of functions.
In[34]:=

EqualAreaClusterPlot FindDiplineClusters data


0

Out[34]=

270

90

180

By default, FindDiplineClusters will try to determine the optimal number of clusters. In this case, the results look very reasonable. The automatic determination can be overridden by specifying the number of clusters to delineate. Here is an example in which 2 clusters are specified:

StereonetIntroduction.nb

19

In[35]:=

EqualAreaClusterPlot FindDiplineClusters data, 2


0

Out[35]=

270

90

180

The result isn't nearly as good, so it would be better to stick with 3 clusters in this case.

Location and Dispersion Statistics


Once sets are identified, either manually or statistically using FindDiplineClusters, their mean values and degree of scatter can be summarized with a variety of spherical statistics. The mean vector of a set is calculated using MeanVector. In the case of results from FindDiplineClusters, there are three lists of data comprising a single list of results. Again, Map is a very useful function because it distributes MeanVector across the three lists
In[36]:= Out[36]=

meanvecs

Map MeanVector, clusters

53.5936, 143.921 , 45.4572, 27.4721 , 39.156, 287.159

The mean poles can be shown together with the individual clusters for comparison, again by making two plots while suppressing output with a semi-colon, then using Show to combine them.

20

StereonetIntroduction.nb

In[37]:=

EqualAreaClusterPlot clusters ; ListEqualAreaPointPlot meanvecs, 0.05, Style clusterplot Show ,


0

Gray, Opacity 0.5

Out[39]=

270

90

180

The scatter or dispersion inherent in each clusterwhich may be caused by a variety of factors including instrument error, human error, and natural variabilitycan be quantified using several statistics available in Stereonet. The angular standard deviations for the three clusters are:
In[40]:= Out[40]=

stddevs

Map AngularStdDev, clusters

13.7193, 15.1032, 15.5756

The angular confidence radii for the mean (at an = 0.05 level of significance) are:
In[41]:= Out[41]=

Map AngularConfidenceRadius, clusters 5.03971, 4.45317, 6.13509

Fisher's K statistics are:


In[42]:= Out[42]=

Map FisherK, clusters 35.4431, 29.7511, 27.8221

Cronin's values (Cronin, 2008) for uncertainty in the mean strikes of the clusters are:
In[43]:= Out[43]=

Map CroninBeta, clusters 8.57487, 6.38143, 7.97284

The angular standard deviations and confidence radii can be plotted using the Stereonet function EqualAreaCirclePlot. Of course, it would always be possible to plot just one circle but there are three sets in the example. So, this is how one might make a table by taking the centers of each cluster from meanpoles and their angular standard deviations from stddevs, create a table of plots, and then show them together:

StereonetIntroduction.nb

21

In[44]:=

Show Table EqualAreaCirclePlot meanvecs , clusterplot


0

, stddevs

, i, 3

Out[44]= 270 270

90 90

180 180

Another way to remove outliers might be to perform clustering, calculate some measure of dispersion (like the angular standard deviation), and filter out any points that fall outside of that threshold. You say that one standard deviation isn't enough? Here's how to do the same thing but with circles showing both one and two angular standard deviations:

22

StereonetIntroduction.nb

In[45]:=

Show Table EqualAreaCirclePlot meanvecs , Table EqualAreaCirclePlot meanvecs , clusterplot


0

, stddevs

, i, 3

, 2 stddevs

, i, 3

Out[45]= 270 270

90 90

180 180

Eigenvalue Fabric Analysis


Stereonet implements eigenvalue fabric analysis as described by Woodcock (1977), Scheidegger (1965), and others. The key limitation is that it must be applied thoughtfully, for example to measurements representing a single joint set. Here are the results for the first set delineated by the clustering function:
In[46]:= Out[46]=

eigen

EigenFabricAnalysis clusters

54, 144 , 22.7626, 0.864028, 0.373371 , 0.351507, 0.478367, 0.804741 , 0.737576, 0.387887, 0.552744 , 0.576563, 0.787851, 0.216487

The direction cosines of the first eigenvector define the mean vector, which is returned separately by EigenFabricAnalysis
In[47]:= Out[47]=

eigen

54, 144

and identical to the result calcuated by MeanVector


In[48]:= Out[48]=

Round MeanVector clusters 54, 144

The three eigenvalues, the ratios of which characterize the shape of girdles or clusters (see Woodcock, 1977) are

StereonetIntroduction.nb

23

In[49]:= Out[49]=

eigen

22.7626, 0.864028, 0.373371

Finally, the three eigenvectors, should you have need for them, are
In[50]:= Out[50]=

eigen

0.351507, 0.478367, 0.804741 , 0.737576, 0.387887, 0.552744 ,

0.576563,

0.787851, 0.216487

It's easy to verify that the first eigenvector comprises the direction cosines of the mean vector.
In[51]:= Out[51]=

CosinesToDipline 53.5852, 143.691

eigen

3, 1

The minus sign ensures a downward-directed mean dip vector, and is required because the third or z components of the eigenvectors are positive.

Optimal Drilling Directions


Given the three joint example joint sets, is there a single optimal drilling direction that will maximize intersection of a borehole with all three sets, either for rock mass characterization or fluid production? More than one optimal direction? Stereonet includes the capability to produce equal area projections of the linear sampling angular deviation (LSAD) defined by Haneberg (2009)
In[52]:=

Show EqualAreaLSADPlot meanvecs , ListEqualAreaPointPlot meanvecs, 0.04 , EqualAreaMesh

Out[52]=

270

90

180

The most optimal drilling directions correspond to LSAD minima, and the most significant minimum in this case suggests an essentially vertical borehole (80/210 plunge/azimuth). The second most significant minimum is defined by a vector oriented approximately 25/300. LSAD maxima, here shown in light colors, represent the most unfavorable drilling directions.

Fisher Random Deviates

24

StereonetIntroduction.nb

Fisher Random Deviates


It is sometimes useful to generate random deviates, for example in probabilistic simulations of fracture orientation distributions. Stereonet includes the function FisherRandomDeviate, which generates a single random sample from a Fisher distribution with a specified mean and value. In this example, = 100.
In[53]:= Out[53]=

FisherRandomDeviate 36.8329, 122.979

35, 135 , 100

For probabilistic modeling it's often necessary to generate large numbers of random deviates. This is how one can generate a table of 100 random deviates:
In[54]:=

fisher Table FisherRandomDeviate ;

35, 135 , 100 , i, 100

And, here is what they look like:


In[55]:=

ListEqualAreaPointPlot fisher, 0.02, Style


0

Orange, Opacity 0.5 , EdgeForm Black

Out[55]=

270

90

180

As a check, calculate the mean vector and Fisher K statistic for the simulated data. They're pretty close to the input values:
In[56]:=

MeanVector fisher FisherK fisher 34.8406, 135.413 93.9326

Out[56]= Out[57]=

StereonetIntroduction.nb

25

Markland Plots
Markland (1972) plots are often used in rock engineering to perform preliminary kinematic analyses of slope stability in jointed rock masses, and Stereonet includes a function for creating simplified Markland plots. EqualAreaMarklandPlot requires 1) a set of discontinuity orientation data for the slope being analyzed, 2) an estimate of the angle of internal friction along the discontinuities, and 3) the orientation of the rock face (which is assumed to be planar). Discontinuities and the slope face are specified by their dip vectors, and the angle of internal friction is given in degrees. Using the example data set, a slope oriented 45/340, and an angle of internal friction of = 25, here is the result:
In[58]:=

EqualAreaMarklandPlot data, 45, 340 , 25


0

Out[58]= 270

90

180

In the Stereonet implementation of Markland's method, the friction circle is represented by the cream or light yellow color, the slope face is represented by the thick red great circle, and the discontinuities are represented by blue great circles. Great circle intersections or dip vectors that fall between the slope face and the edge of the friction circle (colored orange) daylight from the slope and dip at angles steeper than the angle of internal friction. Thus, they are kinematically susceptible to wedge (great circle intersections) or plane (dip vectors) failure under dry, cohesionless, and static conditions. Many practitioners further limit the zone of potential instability to discontinuity dip vectors or discontinuity intersections that fall within 30 of the slope face dip vector. In this example, the Markland plot indicates a high potential for wedge failures controlled by the NE and NW dipping discontinuity sets. The SE dipping set does not pose a wedge or plane failure hazard. As currently written, the Stereonet implementation of Markland's plot does not include the potential for toppling.

Bibliography
Borradaile, G., 2003, Statistics of Earth Science Data: Springer, 378 pp. Cronin, V.S., 2008, Finding the mean and 95 percent confidence interval of a set of strike-and-dip or lineation data: Environmental & Engineering Geoscience, v. 14, p. 113-119. Fisher, N.I., Lewis, T., and Embleton, B.J.J., 1993, Statistical Analysis of Spherical Data: Cambridge, 344 pp. Haneberg, W.C., 2009, Improved optimization and visualization of drilling directions for rock mass discontinuity characterization: Environmental & Engineering Geoscience, v. 15, p. 107-113. Haneberg, W.C., 2004, Computational Geosciences with Mathematica: Springer, 382 pp. Kamb, W.B., 1959, Ice petrofabric observations from Blue Glacier, Washington, in relation to theory and experiment: Journal of Geophysical Research, v. 64, p. 1891-1909. Mahtab, M.A. and Yegulalp, T.M, 1982, A rejection criterion for definition of clusters in orientation data, in Issues in Rock Mechanics, Proceedings, 23rd. Symposium on Rock Mechanics, pp. 116-123.

26

StereonetIntroduction.nb

Mahtab, M.A. and Yegulalp, T.M, 1982, A rejection criterion for definition of clusters in orientation data, in Issues in Rock Mechanics, Proceedings, 23rd. Symposium on Rock Mechanics, pp. 116-123. Markland, J.T.,1972, A useful technique for estimating the stability of rock slopes when the rigid wedge slide type of failure is expected: Imperial College, London, Rock Mechanics Research Reprint 19. Pollard, D.D. and Fletcher, R.C., 2005, Fundmentals of Structural Geology: Cambridge, 512 pp. Priest, S.D., 1993, Discontinuity Analysis for Rock Engineering: Chapman & Hall, 496 pp. Scheidegger, A.E., 1965, On the statistics of the orientation of bedding planes, grain axes and similar sedimentological data: U.S. Geological Survey Professional Paper 525-C, p. C164-C167. Watson, G.S., 1966, The statistics of orientation data: Journal of Geology, v. 74, p. 786-797. Woodcock, N.H., 1977, Specification of fabric shapes using an eigenvalue method: GSA Bulletin, v. 88, p. 1231-1236.