Path: blob/main/tests/docs/manuscript/qmd-full/notebook.qmd
6434 views
```{r}
#| message: false
library(tidyverse)
library(ggExtra)
```
```{r}
#| label: "data-import"
#| message: false
#| results: hide
df_ign <- read_csv("data/lapalma_ign.csv")
df_ign <- df_ign |>
mutate(
Mag = floor(Magnitude),
Depth = case_when(
`Depth(km)` >= 28 ~ "Deep (>28km)",
`Depth(km)` >= 18 ~ "Interchange (18km>x>28km)",
TRUE ~ "Shallow (< 18km)"
)
)
df_ign
```
```{r}
#| label: epochs
cut_times <- ymd_hms(c("2021-09-11", "2021-09-19 14:13:00", "2021-10-01", "2021-12-01", "2021-12-31", "2022-01-01"), truncated = 3)
epochs <- tibble(
start = cut_times[-length(cut_times)],
end = cut_times[-1],
label = c("pre", "early", "phase1", "phase2", "phase3"),
text = c(
"Pre\nEruptive\nSwarm",
"Early Eruptive\nPhase",
"Main Eruptive Phase\n(sustained gas and lava ejection)",
"Final Eruptive Phase\n(reducing gas and lava ejection)",
NA
)
)
```
```{r}
#| label: "erupt-data"
mag_breaks <- c(0, 1, 2, 3, 4, 6)
mag_labels <- c("0 < M <= 1", "1 < M <= 2", "2 < M <= 3", "3 < M <= 4", "M > 4")
df_erupt <- df_ign |>
filter(Date < as.Date("2022-01-01") & Date > as.Date("2021-09-11")) |>
mutate(Magnitude_categories = cut(Magnitude,
breaks = mag_breaks, labels = mag_labels, right = FALSE
))
```
```{r}
#| label: colors
colors <- c(
"#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a",
"#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2",
"#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5"
)
```
```{r}
#| label: "plot-timeline"
#| warning: false
#| fig-width: 24
#| fig-height: 12
eruption <- ymd_hms("2021-09-19 14:13:00")
date_axis_breaks <- as.Date("2021-10-15") + months(rep(0:2, each = 2)) -
days(rep(c(14, 0), times = 3))
date_axis_breaks <- c(eruption, date_axis_breaks[-1])
# Custom Magnitude Scale transform
trans_mag <- scales::trans_new(
name = "Magnitude transformation",
transform = \(x) 3 * 2^(1.3 * x),
inverse = \(x) (1 / 1.3) * log2(x / 3)
)
df_erupt |>
arrange(Magnitude) |>
ggplot(aes(DateTime, `Depth(km)`)) +
geom_point(aes(
fill = Magnitude_categories, size = Magnitude,
alpha = Magnitude_categories
), shape = 21, color = "black") +
geom_vline(xintercept = eruption, color = colors[7]) +
annotate("text",
x = eruption, y = 20, label = "ERUPTION",
color = colors[7], angle = 90, hjust = 1, vjust = -0.2, size = 6
) +
annotate("rect",
xmin = epochs$start, xmax = epochs$end,
ymin = -Inf, ymax = Inf, fill = colors[c(1, 3, 5, 7, 7)], alpha = 0.1
) +
annotate("text",
x = epochs$start + 0.5 * (epochs$end - epochs$start), y = -4,
label = epochs$text, color = colors[c(1, 3, 5, 7, NA)], size = 7
) +
scale_y_continuous("Depth (km)",
trans = scales::reverse_trans(),
breaks = seq(0, 40, 10), limits = c(45, -5), sec.axis = dup_axis()
) +
scale_x_datetime("Eruption Timeline",
expand = c(0, 0),
date_labels = "%Y-%m-%d", breaks = date_axis_breaks
) +
scale_fill_manual("Event Magnitude (M)", values = colors[c(13, 17, 5, 3, 7)]) +
scale_alpha_manual("Event Magnitude (M)", values = c(0.3, 0.4, 0.5, 0.6, 0.8)) +
scale_size("Event Magnitude (M)",
breaks = 1:5, labels = mag_labels,
trans = trans_mag
) +
theme_bw(base_size = 20, base_family = "Helvetica") +
theme(
legend.position = c(0.01, 0.01),
legend.justification = c("left", "bottom"),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
panel.border = element_blank(),
axis.line.x.bottom = element_line(color = "grey50"),
axis.title.y.right = element_blank(),
plot.title = element_text(hjust = 0.5, margin = margin(t = 20, b = 20))
) +
labs(title = "Recorded seismicity during the La Palma eruption 11 September - 15 December 2021 (INVOLCAN Dataset)")
```
```{r}
#| label: "plot-dists"
#| fig-height: 10
#| fig-width: 8
blue <- "#336699"
p <- df_ign |>
ggplot(aes(Magnitude, `Depth(km)`)) +
geom_point(alpha = 0.6, color = blue) +
geom_density2d(color = blue, n = 100, h = c(1, 8), bins = 20) +
scale_y_continuous(trans = "reverse") +
coord_fixed(ratio = 1 / 8) +
labs(title = "Cumulative Events 01-01-2017 to 01-01-2022") +
theme_bw() +
theme(
plot.title = element_text(hjust = 0.5, margin = margin(t = 20, b = 20))
)
ggMarginal(p, type = "histogram", bins = 20, fill = blue, color = "white")
```