-
Notifications
You must be signed in to change notification settings - Fork 0
/
nut-indicators.qmd
548 lines (453 loc) · 20.2 KB
/
nut-indicators.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
---
execute:
warning: false
error: false
filters:
- lightbox
lightbox: auto
bibliography: references.bib
---
# Nutrient Indicators {#sec-nutindicators}
```{r}
#| label: data-load
#| include: false
library(here)
source(here::here('R', '00_loadpackages.R'))
source(here::here('R', '01.1_load_wrangle_NUT.R'))
source(here::here('R', '03_graph_fxns.R'))
load(here('output','data', 'pi_wq.Rdata'))
load(here('output','data', 'ss_wq.Rdata'))
load(here('output','data', 'fm_wq.Rdata'))
load(here('output','data', 'pc_wq.Rdata'))
```
The state thresholds used in the chlorophyll *a*, total nitrogen, and total phosphorus visualizations come from Florida State Surface Water Quality Standards within the Florida Administrative Code.
::: callout-note
# Access the Standards
By visiting [Florida Rules](https://www.flrules.org/gateway/ruleno.asp?id=62-302.530)
:::
## Summary
Most of the stations reported daily average dissolved oxygen values on the lower end of their average ranges in the first quarter of the year (@fig-do), generally coinciding with the higher temperatures observed during the same period of time (@fig-range-temp). Daily averages fell outside average ranges at Pine Island several times throughout the year (@fig-do-1). When temperatures were warmer (Jan-Mar, Aug), the values were lower than the average limit. After the cooler weather in October and the various weather events in the fall (Nor'easters and King Tides), the daily dissolved oxygen values increased above the average range. This year saw some of the lowest and most prolonged periods of dissolved oxygen at Pine Island in the last five years (@fig-do-pi). Values fell below the 2 mg/L hypoxia threshold several times a day and for multiple days in August (@fig-do-pi-2; @tbl-pi-do).
Pellicer Creek frequently experiences low dissolved oxygen events annually (@fig-do-pc-1) and this year was no exception. Though daily averages were relatively within the average daily range (@fig-do-4), closer inspection of the continuous data show several low dissolved oxygen events in July and August, in particular (@fig-do-pc-2). The duration of these events were often not long and not as frequent as Pine Island (@tbl-pc-do).
Chlorophyll *a* values were often higher than average at all stations this year (@fig-chla-boxplots). Chlorophyll *a* at Pine Island more often fell above the state threshold (6.6 $\mu$g/L) than below and record monthly high values were observed in January (7.0 $\mu$g/L), March (9.8 $\mu$g/L), and September (12 $\mu$g/L) (@fig-chla-boxplots-1). San Sebastian also saw high chlorophyll *a* for every month except November and December (data of which is not included in this report at this time) with a record high in January of 7.3 $\mu$g/L. November, however, was much lower than normal at this station (@fig-chla-boxplots-2). Elevated chlorophyll *a* was observed from May through July at Fort Matanzas (@fig-chla-boxplots-3). Pellicer Creek was consistently high for most of the year, with a record value in March (14.5 $\mu$g/L), but experienced lower than normal ranges in October and November (@fig-chla-boxplots-4). Annual geometric mean (AGM) chlorophyll *a* values were high and above the state threshold levels at all sites except for Fort Matanzas (@fig-chla-agm). These values do not include data from December 2023 as that data has not been received from the laboratory as of the current edition of this report. Therefore, these values are likely to change following the addition of the final month of the year.
Interpretations of patterns in total nitrogen (TN) and dissolved inorganic nitrogen (DIN) were difficult this year since quite a bit of the values were not able to be calculated. At Pine Island and Pellicer Creek, however, high TN was observed in the high rainfall months of July and August and also in November (@fig-tn-boxplots). Total Kjeldahl Nitrogen (TKN) was lower than average for most stations; however, all stations experienced higher levels in May, August, and November (@fig-tkn-boxplots).
Total phosphorus continues to fall below the state threshold for every station and similar to TKN, all stations experienced elevated values of total phosphorus and orthophosphate in May (@fig-tp-boxplots; @fig-po4-boxplots). Relatively high levels of orthophosphate were observed at Pine Island January through May and again in August (@fig-po4-boxplots-1).
## Data
### Dissolved Oxygen
```{r}
#| label: fig-do
#| echo: false
#| fig.cap: Historical daily range of dissolved oxygen at each SWMP water quality station with current year daily average overlaid in blue. Horizontal dashed red line indicates 2mg/L hypoxia threshold.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
pi |>
filter(do_mgl > 0) |>
historical_daily_range(param = 'do_mgl', target_yr = 2023, criteria = 2)
historical_daily_range(ss, param = 'do_mgl', target_yr = 2023, criteria = 2)
historical_daily_range(filter(fm, do_mgl > 0), param = 'do_mgl', target_yr = 2023, criteria = 2)
pc |>
filter(do_mgl < 20 & do_mgl > 0) |>
historical_daily_range(param = 'do_mgl', target_yr = 2023, criteria = 2)
```
Dissolved oxygen at Pine Island has been uncharacteristically low in the past two years.
```{r}
#| label: fig-do-pi
#| echo: false
#| fig-cap: Continuous dissolved oxygen at Pine Island with monthly average overlaid in solid gray line. Conditions are indicated as good when above 5 mg/L, fair between 2 and 5 mg/L, and poor if less than 2 mg/L.
#| fig.subcap:
#| - "For the past five years"
#| - "For the current 2023 year"
#| layout-ncol: 2
threshold_criteria_plot(pi, param = 'do_mgl', rng = c(2018, 2023),
thresholds = c(2,5),
threshold_labs = c('Poor', 'Fair', 'Good'),
monthly_smooth = TRUE,
threshold_cols = c('#FEC596', '#FFFFCC', '#ABD9E9')) +
theme(axis.text = element_text(color = "black", size = 18),
axis.title.y = element_text(size = 20))
threshold_criteria_plot(pi, param = 'do_mgl', rng = c(2023, 2023),
thresholds = c(2,5),
threshold_labs = c('Poor', 'Fair', 'Good'),
monthly_smooth = TRUE,
threshold_cols = c('#FEC596', '#FFFFCC', '#ABD9E9')) +
theme(axis.text = element_text(color = "black", size = 18),
axis.title.y = element_text(size = 20))
```
```{r}
#| label: tbl-pi-do
#| echo: false
#| tbl-cap: "Identification and Duration of Hypoxia Events (< 2 mg/L for > 0.5 hrs) at Pine Island"
pi %>%
filter(datetimestamp > "2023-01-01 00:00") %>%
setstep() %>%
threshold_identification(param = c('do_mgl'),
parameter_threshold = c(2),
threshold_type = c('<'),
time_threshold = 0.5) %>%
select(-parameter, -thr_violation, -statement) %>%
rename(`Duration (hrs)` = duration,
`Start Time` = starttime,
`End Time` = endtime) %>%
kbl(align = "c") %>%
kable_styling(fixed_thead = T) %>%
column_spec(3, border_left = T)
```
Pellicer Creek is located within a waterbody with known impairments for dissolved oxygen, chlorophyll *a*, and fecal coliform bacteria. As such, this station frequently experiences low dissolved oxygen values, particularly in the summer months (@fig-do-pc).
```{r}
#| label: fig-do-pc
#| echo: false
#| fig.cap: Continuous dissolved oxygen at Pellicer Creek with monthly average overlaid in solid gray line. Conditions are indicated as good when above 5 mg/L, fair between 2 and 5 mg/L, and poor if less than 2 mg/L.
#| fig.subcap:
#| - "For the past five years"
#| - "For the current 2023 year"
#| layout-ncol: 2
threshold_criteria_plot(pc, param = 'do_mgl', rng = c(2018, 2023),
thresholds = c(2,5),
threshold_labs = c('Poor', 'Fair', 'Good'),
monthly_smooth = TRUE,
threshold_cols = c('#FEC596', '#FFFFCC', '#ABD9E9')) +
theme(axis.text = element_text(color = "black", size = 18),
axis.title.y = element_text(size = 20))
threshold_criteria_plot(pc, param = 'do_mgl', rng = c(2023, 2023),
thresholds = c(2,5),
threshold_labs = c('Poor', 'Fair', 'Good'),
monthly_smooth = TRUE,
threshold_cols = c('#FEC596', '#FFFFCC', '#ABD9E9')) +
theme(axis.text = element_text(color = "black", size = 18),
axis.title.y = element_text(size = 20))
```
```{r}
#| label: tbl-pc-do
#| echo: false
#| tbl-cap: "Identification and Duration of Hypoxia Events (< 2 mg/L for > 0.5 hrs) at Pellicer Creek"
pc %>%
filter(datetimestamp > "2023-01-01 00:00") %>%
setstep() %>%
threshold_identification(param = c('do_mgl'),
parameter_threshold = c(2),
threshold_type = c('<'),
time_threshold = 0.5) %>%
select(-parameter, -thr_violation, -statement) %>%
rename(`Duration (hrs)` = duration,
`Start Time` = starttime,
`End Time` = endtime) %>%
kbl(align = "c") %>%
kable_styling(fixed_thead = T) %>%
column_spec(3, border_left = T)
```
### Chlorophyll *a*
```{r}
#| label: fig-chla-boxplots
#| echo: false
#| fig.cap: Historical monthly chlorophyll a at each SWMP water quality station with current year monthly value overlaid in red. Horizontal dashed blue line indicates the state threshold, as found in F.A.C 62-302.530.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
boxplot_currentyear(station = "gtmpinut",
param = chla_n,
threshold = TRUE,
thres_val = 6.6) +
labs(y = "Mean Monthly Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "Mar",
y = 20,
size = 3,
color = "blue",
label = "State Threshold 6.6 (\U00B5g/L)")
boxplot_currentyear(station = "gtmssnut",
param = chla_n,
threshold = TRUE,
thres_val = 4.0) +
labs(y = "Mean Monthly Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "Mar",
y = 16,
size = 3,
color = "blue",
label = "State Threshold 4.0 (\U00B5g/L)")
boxplot_currentyear(station = "gtmfmnut",
param = chla_n,
threshold = TRUE,
thres_val = 5.5) +
labs(y = "Mean Monthly Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "Mar",
y = 24,
size = 3,
color = "blue",
label = "State Threshold 5.5 (\U00B5g/L)")
boxplot_currentyear(station = "gtmpcnut",
param = chla_n,
threshold = TRUE,
thres_val = 4.3) +
labs(y = "Mean Monthly Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "Mar",
y = 38,
size = 3,
color = "blue",
label = "State Threshold 4.3 (\U00B5g/L)")
```
```{r}
#| label: fig-chla-agm
#| echo: false
#| fig.cap: Annual geometric means of monthly chlorophyll *a* at each SWMP water quality station. Horizontal dashed blue line indicates the state threshold, as found in F.A.C 62-302.530. Values exceeding the threshold are indicated in red. The 2023 value is based upon data to date and does not equal an entire year of data.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
agm(station = "gtmpinut",
param = CHLA_agm,
threshold = TRUE,
thres_val = 6.6) +
labs(y = "Geo.Mean Annual Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "2006",
y = 8,
size = 3,
color = "blue",
label = "State Threshold 6.6 (\U00B5g/L)")
agm(station = "gtmssnut",
param = CHLA_agm,
threshold = TRUE,
thres_val = 4.0) +
labs(y = "Geo.Mean Annual Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "2006",
y = 6,
size = 3,
color = "blue",
label = "State Threshold 4.0 (\U00B5g/L)")
agm(station = "gtmfmnut",
param = CHLA_agm,
threshold = TRUE,
thres_val = 5.5) +
labs(y = "Geo.Mean Annual Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "2006",
y = 6,
size = 3,
color = "blue",
label = "State Threshold 5.5 (\U00B5g/L)")
agm(station = "gtmpcnut",
param = CHLA_agm,
threshold = TRUE,
thres_val = 4.3) +
labs(y = "Geo.Mean Annual Chlorophyll-a (\U00B5g/L)") +
annotate("text",
x = "2006",
y = 16,
size = 3,
color = "blue",
label = "State Threshold 4.3 (\U00B5g/L)")
```
### Nitrogen
#### Total Nitrogen
TN is calculated by adding TKN and NO23. It accounts for the inorganic nitrogen fraction as well as larger pools of organic bioavailable forms.
Several of the NO23 values fell below the Florida Department of Environmental Protection Central Lab's minimum detection limit and therefore TN was not able to be calculated and is missing for quite a few months at all the stations (@fig-tn-boxplots). This was especially true at Fort Matanzas which has the least amount of TN data (@fig-tn-boxplots-3).
```{r}
#| label: fig-tn-boxplots
#| echo: false
#| fig.cap: Historical monthly total nitrogen at each SWMP water quality station with current year monthly value overlaid in red. Horizontal dashed blue line indicates the state threshold, as found in F.A.C 62-302.530.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
boxplot_currentyear(station = "gtmpinut",
param = tn,
threshold = TRUE,
thres_val = 0.65) +
labs(y = "Mean Monthly Total Nitrogen (mg/L)") +
annotate("text",
x = "Mar",
y = 1.2,
size = 3,
color = "blue",
label = "State Threshold 0.65 (mg/L)")
boxplot_currentyear(station = "gtmssnut",
param = tn,
threshold = TRUE,
thres_val = 0.55) +
labs(y = "Mean Monthly Total Nitrogen (mg/L)") +
annotate("text",
x = "Mar",
y = 1.0,
size = 3,
color = "blue",
label = "State Threshold 0.55 (mg/L)")
boxplot_currentyear(station = "gtmfmnut",
param = tn,
threshold = TRUE,
thres_val = 0.55) +
labs(y = "Mean Monthly Total Nitrogen (mg/L)") +
annotate("text",
x = "Mar",
y = 1.0,
size = 3,
color = "blue",
label = "State Threshold 0.55 (mg/L)")
boxplot_currentyear(station = "gtmpcnut",
param = tn,
threshold = TRUE,
thres_val = 1.10) +
labs(y = "Mean Monthly Total Nitrogen (mg/L)") +
annotate("text",
x = "Mar",
y = 1.7,
size = 3,
color = "blue",
label = "State Threshold 1.10 (mg/L)")
```
#### Ammonium
Ammonium is directly measured in our samples and is a key inorganic nutrient assimilated by phytoplankton in primary production.
```{r}
#| label: fig-nh4-boxplots
#| echo: false
#| fig.cap: Historical monthly ammonium at each SWMP water quality station with current year monthly value overlaid in red.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
boxplot_currentyear(station = "gtmpinut",
param = nh4f,
threshold = FALSE) +
labs(y = "Mean Monthly Ammonium (mg/L)")
boxplot_currentyear(station = "gtmssnut",
param = nh4f,
threshold = FALSE) +
labs(y = "Mean Monthly Ammonium (mg/L)")
boxplot_currentyear(station = "gtmfmnut",
param = nh4f,
threshold = FALSE) +
labs(y = "Mean Monthly Ammonium (mg/L)")
boxplot_currentyear(station = "gtmpcnut",
param = nh4f,
threshold = FALSE) +
labs(y = "Mean Monthly Ammonium (mg/L)")
```
#### Total Kjeldahl Nitrogen
TKN is the total concentration of organic nitrogen and ammonia. It is directly measured in our samples.
```{r}
#| label: fig-tkn-boxplots
#| echo: false
#| fig.cap: Historical monthly total kjeldahl nitrogen at each SWMP water quality station with current year monthly value overlaid in red.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
boxplot_currentyear(station = "gtmpinut",
param = tkn,
threshold = FALSE) +
labs(y = "Mean Monthly Total Kjeldahl Nitrogen (mg/L)")
boxplot_currentyear(station = "gtmssnut",
param = tkn,
threshold = FALSE) +
labs(y = "Mean Monthly Total Kjeldahl Nitrogen (mg/L)")
boxplot_currentyear(station = "gtmfmnut",
param = tkn,
threshold = FALSE) +
labs(y = "Mean Monthly Total Kjeldahl Nitrogen (mg/L)")
boxplot_currentyear(station = "gtmpcnut",
param = tkn,
threshold = FALSE) +
labs(y = "Mean Monthly Total Kjeldahl Nitrogen (mg/L)")
```
### Phosphorus
#### Total Phosphorus
```{r}
#| label: fig-tp-boxplots
#| echo: false
#| fig.cap: Historical monthly total phosphorus at each SWMP water quality station with current year monthly value overlaid in red. Horizontal dashed blue line indicates the state threshold, as found in F.A.C 62-302.530.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
boxplot_currentyear(station = "gtmpinut",
param = tp,
threshold = TRUE,
thres_val = 0.105) +
labs(y = "Mean Monthly Total Phosphorus (mg/L)") +
annotate("text",
x = "Mar",
y = 0.15,
size = 3,
color = "blue",
label = "State Threshold 0.105 (mg/L)")
boxplot_currentyear(station = "gtmssnut",
param = tp,
threshold = TRUE,
thres_val = 0.11) +
labs(y = "Mean Monthly Total Phosphorus (mg/L)") +
annotate("text",
x = "Mar",
y = 0.12,
size = 3,
color = "blue",
label = "State Threshold 0.11 (mg/L)")
boxplot_currentyear(station = "gtmfmnut",
param = tp,
threshold = TRUE,
thres_val = 0.111) +
labs(y = "Mean Monthly Total Phosphorus (mg/L)") +
annotate("text",
x = "Mar",
y = 0.12,
size = 3,
color = "blue",
label = "State Threshold 0.111 (mg/L)")
boxplot_currentyear(station = "gtmpcnut",
param = tp,
threshold = TRUE,
thres_val = 0.123) +
labs(y = "Mean Monthly Total Phosphorus (mg/L)") +
annotate("text",
x = "Mar",
y = 0.25,
size = 3,
color = "blue",
label = "State Threshold 0.123 (mg/L)")
```
#### Orthophosphate
```{r}
#| label: fig-po4-boxplots
#| echo: false
#| fig.cap: Historical monthly orthophosphate at each SWMP water quality station with current year monthly value overlaid in red.
#| fig.subcap:
#| - "Pine Island"
#| - "San Sebastian"
#| - "Fort Matanzas"
#| - "Pellicer Creek"
#| layout-ncol: 2
boxplot_currentyear(station = "gtmpinut",
param = po4f,
threshold = FALSE) +
labs(y = "Mean Monthly Orthophosphate (mg/L)")
boxplot_currentyear(station = "gtmssnut",
param = po4f,
threshold = FALSE) +
labs(y = "Mean Monthly Orthophosphate (mg/L)")
boxplot_currentyear(station = "gtmfmnut",
param = po4f,
threshold = FALSE) +
labs(y = "Mean Monthly Orthophosphate (mg/L)")
boxplot_currentyear(station = "gtmpcnut",
param = po4f,
threshold = FALSE) +
labs(y = "Mean Monthly Orthophosphate (mg/L)")
```