Para el desarollo de este trabajó se empleó el código de http://srmulcahy.github.io/2012/12/04/ternary-plots-r.html https://github.com/markolipka/ggplot_Piper y funciona en el paquete smwrGraphs.
Con el fin de la consecusión del código se emplearon las siguientes librerÃas. Estas se obtienen a partir de los desarrollos mencionados y también se ajuntan en los archivos del trabajo.
source("ggplot_Piper.R")
library("hydrogeo")
## Warning: package 'hydrogeo' was built under R version 4.3.3
library("tidyverse")
## Warning: package 'forcats' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Para limpiar y tratar los datos se emplea Excel por cómodida, debido a que se trata de un archivo pequeño. No obstante, si la cantidad de datos fuese mucho más extensa, lo ideal serÃa emplear este u otros programas. El archivo con el cuál se realizó esto se encuentra también adjunto.
Los datos quÃmicos se encuentran en \(\frac{mg}{L}\) y debido a que se trata con iones se debe conseguir el equivalente molecular. Para ello se emplea la siguiente formula:
\[mEq= \frac{Valencia}{PesoMolar} \times mg \]
Se cargan los datos anteriormente trados, ya listos en su correspondiente \(mEq\).
milliequivalents = read_csv("datos.csv")
## Rows: 38 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): IDs
## dbl (8): Ca, Mg, Na, K, Cl, SO4, CO3, HCO3
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
percents <- toPercent(milliequivalents)
data <- as.data.frame(percents)
head(data)
## Ca Mg Na K Cl SO4 CO3 HCO3
## 1 27.626459 8.171206 28.40467 35.7976654 38.362069 0.000000 0 61.6379310
## 2 3.187250 17.906404 77.15757 1.7487768 89.888119 9.739532 0 0.3723493
## 3 3.428524 19.011762 75.65720 1.9025110 91.086487 8.559384 0 0.3541287
## 4 40.416626 11.690840 47.01645 0.8760829 18.389199 14.581006 0 67.0297952
## 5 51.776771 15.895540 31.08753 1.2401622 9.405256 14.925185 0 75.6695587
## 6 48.061699 18.738268 32.66955 0.5304823 14.361079 14.093117 0 71.5458047
## IDs
## 1 WEC-452-40
## 2 WEC-452-37
## 3 WEC-452-39
## 4 WEC-452-1
## 5 WEC-452-2
## 6 WEC-452-3
Se normalizan al 100% los datos de los diferentes compuestos o elementos.
cation.sums <- apply(data[, c("Ca", "Mg", "Na", "K")], 1, FUN = sum)
anion.sums <- apply(data[, c("Cl", "SO4", "CO3", "HCO3")], 1, FUN = sum)
Se realiza una transformación algebráica para generar el diagrama de Piper.
piper_data <- transform_piper_data(Ca = data$Ca,
Mg = data$Mg,
Cl = data$Cl,
SO4 = data$SO4,
name = data$IDs)
piper_data
## observation x y
## 1 WEC-452-40 68.287938 7.0765097
## 2 WEC-452-37 87.859548 15.5074831
## 3 WEC-452-39 87.065595 16.4647563
## 4 WEC-452-1 53.737954 10.1246182
## 5 WEC-452-2 40.275459 13.7660147
## 6 WEC-452-3 42.569167 16.2279024
## 7 WEC-452-4 82.555661 8.4715867
## 8 WEC-452-5 86.305501 7.9271025
## 9 WEC-452-6 96.069632 2.0576214
## 10 WEC-452-7 49.673692 30.1123088
## 11 WEC-452-9 50.079047 22.8750719
## 12 WEC-452-10 47.197230 17.5046992
## 13 WEC-452-11 41.680278 15.0806446
## 14 WEC-452-15 22.237847 14.8919582
## 15 WEC-452-17 47.710718 11.6944898
## 16 WEC-452-18 44.349438 13.8055249
## 17 WEC-452-20 61.399852 13.9509793
## 18 WEC-452-22 67.833070 14.2578867
## 19 WEC-452-23 76.182944 12.8415453
## 20 WEC-452-24 93.964148 4.1048605
## 21 WEC-452-25 67.904008 10.2789233
## 22 WEC-452-29 34.817382 12.2828035
## 23 WEC-452-30 68.031953 10.9542616
## 24 WEC-452-31 55.983361 14.6111669
## 25 WEC-452-36 41.163924 24.4697894
## 26 WEC-452-38 40.755341 13.9566211
## 27 WEC-452-16 43.016143 19.3808243
## 28 WEC-452-8 33.853492 20.3069807
## 29 WEC-452-12 49.219591 15.0863855
## 30 WEC-452-13 46.283598 16.2232170
## 31 WEC-452-14 9.105729 3.1059297
## 32 WEC-452-19 14.831472 8.1033618
## 33 WEC-452-26 15.424021 14.1000015
## 34 WEC-452-27 11.067622 7.1976844
## 35 WEC-452-28 94.855897 4.0160725
## 36 WEC-452-33 22.556777 20.4337158
## 37 WEC-452-34 14.869142 7.5164868
## 38 WEC-452-35 17.926209 15.6899074
## 39 WEC-452-40 158.362069 0.0000000
## 40 WEC-452-37 214.757885 8.4347265
## 41 WEC-452-39 215.366179 7.4126832
## 42 WEC-452-1 145.679702 12.6275883
## 43 WEC-452-2 136.867849 12.9256584
## 44 WEC-452-3 141.407637 12.2050619
## 45 WEC-452-4 167.009628 5.8785271
## 46 WEC-452-5 186.398633 26.9157299
## 47 WEC-452-6 140.025344 1.0974192
## 48 WEC-452-7 153.170655 9.9164434
## 49 WEC-452-9 142.075499 17.9744421
## 50 WEC-452-10 173.938148 18.9988034
## 51 WEC-452-11 153.919105 10.5022881
## 52 WEC-452-15 130.279270 5.3022245
## 53 WEC-452-17 147.932712 12.2234149
## 54 WEC-452-18 137.754903 14.0839329
## 55 WEC-452-20 162.207336 29.8205133
## 56 WEC-452-22 145.992920 9.7424543
## 57 WEC-452-23 144.693653 11.3515154
## 58 WEC-452-24 169.808069 18.0946644
## 59 WEC-452-25 155.212377 0.5164511
## 60 WEC-452-29 144.165591 8.7832657
## 61 WEC-452-30 148.911693 15.8986867
## 62 WEC-452-31 143.437500 10.6381437
## 63 WEC-452-36 149.656608 27.2515580
## 64 WEC-452-38 139.496455 23.7721378
## 65 WEC-452-16 147.530948 26.3025221
## 66 WEC-452-8 146.030769 34.8543766
## 67 WEC-452-12 157.198497 27.9259575
## 68 WEC-452-13 157.733781 25.6746767
## 69 WEC-452-14 130.896432 3.0450489
## 70 WEC-452-19 142.082425 12.8351583
## 71 WEC-452-26 137.358614 18.4020758
## 72 WEC-452-27 131.381831 5.1847254
## 73 WEC-452-28 181.322613 5.6671683
## 74 WEC-452-33 139.023622 17.4024296
## 75 WEC-452-34 140.064824 9.9038411
## 76 WEC-452-35 136.577980 12.4314201
## 77 WEC-452-40 111.282202 81.5451547
## 78 WEC-452-37 149.266998 121.8688718
## 79 WEC-452-39 148.602792 123.0508752
## 80 WEC-452-1 100.431369 91.0004154
## 81 WEC-452-2 88.329065 96.9977436
## 82 WEC-452-3 90.827114 99.8135625
## 83 WEC-452-4 124.034096 80.3147257
## 84 WEC-452-5 141.833582 104.1050715
## 85 WEC-452-6 117.770303 39.6444856
## 86 WEC-452-7 95.592160 109.6458508
## 87 WEC-452-9 94.662590 100.0964445
## 88 WEC-452-10 110.998998 128.0131881
## 89 WEC-452-11 96.478041 109.9936577
## 90 WEC-452-15 73.490255 103.6642050
## 91 WEC-452-17 97.974402 98.7542056
## 92 WEC-452-18 91.132540 94.8366639
## 93 WEC-452-20 116.384710 109.1880516
## 94 WEC-452-22 105.609509 79.6889453
## 95 WEC-452-23 110.008166 71.4288598
## 96 WEC-452-24 135.924596 76.7828735
## 97 WEC-452-25 108.740024 81.0093543
## 98 WEC-452-29 88.481262 105.2318640
## 99 WEC-452-30 109.899148 83.4707553
## 100 WEC-452-31 98.563523 88.3625635
## 101 WEC-452-36 96.213289 119.8185921
## 102 WEC-452-38 92.959379 104.3771468
## 103 WEC-452-16 97.271657 113.3546300
## 104 WEC-452-8 94.141580 124.7295661
## 105 WEC-452-12 106.915490 115.0191439
## 106 WEC-452-13 104.737077 117.4681487
## 107 WEC-452-14 69.983506 108.5498916
## 108 WEC-452-19 79.822894 120.6724028
## 109 WEC-452-26 77.633213 121.8500541
## 110 WEC-452-27 70.643638 110.3869195
## 111 WEC-452-28 138.565883 79.7243905
## 112 WEC-452-33 79.915147 119.7818542
## 113 WEC-452-34 78.156149 117.1333805
## 114 WEC-452-35 76.311455 116.8166577
Finalmente, a partir de los datos anteriormente tratados y correctamente transformados se genera el diagrama de Piper con la función de ggplot_piper().
ggplot_piper() + geom_point(aes(x,y), data=piper_data)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.