This tutorial shows how to create various orientation plots using the {structr} package, including stereographic and equal-area projections, fabric plots, density plots, and fault plots.
Import and convert to spherical objects:
data(example_planes_df)
data(example_lines_df)
planes <- Plane(example_planes_df$dipdir, example_planes_df$dip)
lines <- Line(example_lines_df$trend, example_lines_df$plunge)Equal-area projection
Lambert equal area, lower hemisphere projection is the default plotting setting.
stereoplot()
points(lines, col = "#B63679", pch = 19, cex = .5)
points(planes, col = "#000004", pch = 1, cex = .5)
legend("topright", legend = c("Lines", "Planes"), col = c("#B63679", "#000004"), pch = c(19, 1), cex = 1)
title(main = "Example data", sub = "Lambert equal area, lower hemisphere projection")
Points can be added using the
points()function.
Stereographic projection
To change to equal angle stereographic, upper hemisphere projection,
just set the earea argument to FALSE, and the
upper.hem argument to TRUE:
stereoplot(earea = FALSE)
points(lines, col = "#B63679", pch = 19, cex = .5, earea = FALSE, upper.hem = TRUE)
points(planes, col = "#000004", pch = 1, cex = .5, earea = FALSE, upper.hem = TRUE)
legend("topright", legend = c("Lines", "Planes"), col = c("#B63679", "#000004"), pch = c(19, 1), cex = 1)
title(main = "Example data", sub = "Equal angle stereographic, upper hemisphere projection")
Great and small circles
Great and small circles can be added using the lines()
function.
Adding great circles:
stereoplot(guides = FALSE) # turn of guides for better visibility
lines(planes, col = "lightgrey", lty = 1)
points(planes, col = "#000004", pch = 1, cex = .5)
To plota small circle with, e.g., a 10° radius, you need to specify
the ang argument in lines():
stereoplot(guides = FALSE)
lines(lines[1, ], ang = 10, col = "#B63679", pch = 19, cex = .5)
Fabric plots
The Eigenvalues of the orientation tensor describe the shape of the distribution of these vectors, that is who clustered, cylindrical or random these vectors are distributed.
A Fabric plot visualizes the shape of the distribution by plotting the eigenvalues of the orientation tensor. Three different diagram are provided by {structr}, namely the triangular Vollmer plot after Vollmer (1990), the logarithmic biplot (Woodcock plot) after Woodcock (1977), and the Lode parameter vs. natural octahedral strain diagram (Hsü plot) after Hsü (1965).
Vollmer plot
vollmer_plot() creates a triangular plot showing the
shape of the orientation distribution (after Vollmer, 1990).
vollmer_plot(planes, col = "#000004", pch = 1, cex = 2)
vollmer_plot(lines, add = TRUE, col = "#B63679", pch = 19, cex = 2)
legend("topright", legend = c("Lines", "Planes"), col = c("#B63679", "#000004"), pch = c(19, 1), cex = 1)
Woodcock plot
woodcock_plot() creates a logarithmic biplot showing the
shape of the orientation distribution (after Woodcock, 1977).
woodcock_plot(planes, col = "#000004", pch = 1, cex = 2)
woodcock_plot(lines, add = TRUE, col = "#B63679", pch = 19, cex = 2)
legend("topright", legend = c("Lines", "Planes"), col = c("#B63679", "#000004"), pch = c(19, 1), cex = 1)
Hsü plot
hsu_fabric_plot() creates a Lode parameter vs. natural
octahedral strain diagram showing the shape of the orientation
distribution (after Hsü, 1965).
hsu_fabric_plot(planes, col = "#000004", pch = 1, cex = 2)
hsu_fabric_plot(lines, add = TRUE, col = "#B63679", pch = 19, cex = 2)
legend("topright", legend = c("Lines", "Planes"), col = c("#B63679", "#000004"), pch = c(19, 1), cex = 1)
Density plots
Kamb contours and densities can be added to an
existing projection plot using the contour functions.
Weighted densities can be controlled by the weights
argument and are useful when the orientation measurements have different
accuracies.
example_planes_df$quality <- ifelse(is.na(example_planes_df$quality), 6, example_planes_df$quality) # replacing NA values with 6
plane_weightings <- 6 / example_planes_df$quality
stereoplot(guides = FALSE)
points(planes, col = "grey", pch = 16, cex = .5)
contour(planes, add = TRUE, density.params = list(weights = plane_weightings))
contour() adds contour lines, while
contourf() adds filled contours and image()
adds a density image (i.e. a dense grid of colored rectangles). See
?contour, ?contourf, and ?image
for more information.
stereoplot(guides = FALSE)
points(planes, col = "grey", pch = 16, cex = .5)
contourf(planes, add = TRUE, density.params = list(weights = plane_weightings))
Synopsis
Let’s create a publication ready synoptical plot for the line and plane orientation data, showing the density distribution, eigenvectors/mean values, and fabric strength.
# Minimum eigenvector of plane's orientation tensor:
planes_eigen <- ot_eigen(planes)$vectors
planes_eigen3 <- planes_eigen[3, ]
# Mean and SD of lines
lines_mean <- sph_mean(lines)
lines_sd <- sph_sd(lines)
# Fabric strength
fabric_p <- or_shape_params(planes)$Vollmer["D"]
fabric_l <- or_shape_params(lines)$Vollmer["D"]The final plot:
# two plots side by side
par(mfrow = c(1, 2))
# Planes
stereoplot(guides = TRUE, col = "grey96")
points(planes, col = "grey", pch = 16, cex = .5)
contour(planes, add = TRUE, weights = plane_weightings)
points(planes_eigen3, col = "black", pch = 16)
lines(planes_eigen3, col = "black", pch = 16)
title(
main = "Planes",
sub = paste0(
"N: ", nrow(planes), " | Fabric strength: ", round(fabric_p, 2),
"\nLambert equal area, lower hemisphere projection"
)
)
# Lines
stereoplot(guides = TRUE, col = "grey96")
points(lines, col = "grey", pch = 16, cex = .5)
contour(lines, add = TRUE, weights = line_weightings)
points(lines_mean, col = "black", pch = 16)
lines(lines_mean, ang = lines_sd, col = "black")
title(
main = "Lines",
sub = paste0(
"N: ", nrow(lines), " | Fabric strength: ", round(fabric_l, 2),
"\nLambert equal area, lower hemisphere projection"
)
)
Fault plots
Fault objects consist of planes (fault plane), lines (e.g. striae), and the sense of movement. There are two ways how these combined features can be visualized, namely the Angelier and the Hoeppner plot.
Angelier plot
The Angelier plot shows all planes as great circles and lineations as points (after Angelier , 1984). Fault striae are plotted as vectors on top of the lineation pointing in the movement direction of the hanging wall. Easy to read in case of homogeneous or small datasets.
f <- Fault(
c("a" = 120, "b" = 125, "c" = 100),
c(60, 62, 50),
c(110, 25, 30),
c(58, 9, 23),
c(1, -1, 1)
)
stereoplot(title = "Angelier plot")
angelier(f, col = viridis::magma(nrow(f), end = .9))
Hoeppner plot
The Hoeppner plot shows all planes as poles while lineations are not shown (after Hoeppner, 1955). Instead, fault striae are plotted as vectors on top of poles pointing in the movement direction of the hanging wall. Useful in case of large or heterogeneous datasets.
stereoplot(title = "Hoeppner plot")
hoeppner(f, col = viridis::magma(nrow(f), end = .9), points = FALSE)
The points argument disables plotting the points at the
start of the arrows.
fault_plot()is a wrapper function that allows to switch between Angelier and Hoeppner plot using thetypeargument. See?fault_plotfor details.